userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
linear.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/congestion_control/controllers/linear.hpp
4
/// @brief @copybrief congestion_control::v2::LinearController
5
6
#
include
<
optional
>
7
8
#
include
<
userver
/
congestion_control
/
controllers
/
linear_config
.
hpp
>
9
#
include
<
userver
/
congestion_control
/
controllers
/
v2
.
hpp
>
10
#
include
<
userver
/
congestion_control
/
limiter
.
hpp
>
11
#
include
<
userver
/
dynamic_config
/
source
.
hpp
>
12
#
include
<
userver
/
utils
/
periodic_task
.
hpp
>
13
#
include
<
userver
/
utils
/
sliding_interval
.
hpp
>
14
#
include
<
userver
/
yaml_config
/
yaml_config
.
hpp
>
15
16
USERVER_NAMESPACE_BEGIN
17
18
namespace
congestion_control
::v2 {
19
20
constexpr
std::size_t kShortTimingsEpochs = 3;
21
constexpr
std::size_t kLongTimingsEpochs = 30;
22
23
/// @brief Linear congestion control controller (v2)
24
class
LinearController
final
:
public
Controller
{
25
public
:
26
using
StaticConfig =
Controller
::
Config
;
27
28
LinearController(
29
const
std::string& name,
30
v2::
Sensor
& sensor,
31
Limiter
& limiter,
32
Stats
& stats,
33
const
StaticConfig& config,
34
dynamic_config::Source config_source,
35
std::function<v2::
Config
(
const
dynamic_config::Snapshot&)> config_getter
36
);
37
38
LimitWithDetails
Update(
const
Sensor
::
Data
& current)
override
;
39
40
private
:
41
struct
SeparateTimings {
42
utils
::SlidingInterval<int64_t> long_timings
{
kLongTimingsEpochs
}
;
43
utils
::SlidingInterval<int64_t> short_timings
{
kShortTimingsEpochs
}
;
44
};
45
StaticConfig config_;
46
utils
::SlidingInterval<int64_t> current_load_;
47
std::unordered_map<std::string, SeparateTimings> separate_timings_;
48
std::optional<std::size_t> current_limit_;
49
std::size_t epochs_passed_{0};
50
51
dynamic_config::Source config_source_;
52
std::function<v2::
Config
(
const
dynamic_config::Snapshot&)> config_getter_;
53
};
54
55
LinearController::StaticConfig
56
Parse(
const
yaml_config::
YamlConfig
& value, formats::
parse
::
To
<LinearController::StaticConfig>);
57
58
}
// namespace congestion_control::v2
59
60
USERVER_NAMESPACE_END
userver
congestion_control
controllers
linear.hpp
Generated on
for userver by
Doxygen
1.17.0