userver: userver/components/manager_controller_component.hpp Source File
Loading...
Searching...
No Matches
manager_controller_component.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/components/manager_controller_component.hpp
4/// @brief @copybrief components::ManagerControllerComponent
5
6#include <userver/components/component_fwd.hpp>
7#include <userver/components/impl/component_base.hpp>
8#include <userver/concurrent/async_event_source.hpp>
9#include <userver/dynamic_config/snapshot.hpp>
10#include <userver/engine/task/task_processor_fwd.hpp>
11#include <userver/utils/statistics/entry.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace components {
16
17class Manager;
18
19// clang-format off
20
21/// @ingroup userver_components
22///
23/// @brief Component that prepares the engine internals and starts all the
24/// other components.
25///
26/// ## Dynamic config
27/// * @ref USERVER_TASK_PROCESSOR_PROFILER_DEBUG
28/// * @ref USERVER_TASK_PROCESSOR_QOS
29///
30/// ## Static options:
31/// Name | Description | Default value
32/// ---- | ----------- | -------------
33/// coro_pool.initial_size | amount of coroutines to preallocate on startup | -
34/// coro_pool.max_size | max amount of coroutines to keep preallocated | -
35/// coro_pool.stack_size | size of a single coroutine | 256 * 1024
36/// event_thread_pool.threads | number of threads to process low level IO system calls (number of ev loops to start in libev) | -
37/// components | dictionary of "component name": "options" | -
38/// default_task_processor | name of the default task processor to use in components | -
39/// task_processors.*NAME*.*OPTIONS* | dictionary of task processors to create and their options. See description below | -
40/// mlock_debug_info | whether to mlock(2) process debug info to prevent major page faults on unwinding | true
41///
42/// ## Static task_processor options:
43/// Name | Description | Default value
44/// ---- | ----------- | -------------
45/// guess-cpu-limit | guess optimal threads count | false
46/// thread_name | set OS thread name to this value | -
47/// worker_threads | threads count for the task processor | -
48/// os-scheduling | OS scheduling mode for the task processor threads. 'idle' sets the lowest priority. 'low-priority' sets the priority below 'normal' but higher than 'idle'. | normal
49/// spinning-iterations | tunes the number of spin-wait iterations in case of an empty task queue before threads go to sleep | 10000
50/// task-trace | optional dictionary of tracing options | empty (disabled)
51/// task-trace.every | set N to trace each Nth task | 1000
52/// task-trace.max-context-switch-count | set upper limit of context switches to trace for a single task | 1000
53/// task-trace.logger | required name of logger to write traces to, should not be the 'default' logger | -
54///
55/// Tips and tricks on `task-trace` usage are described in
56/// @ref scripts/docs/en/userver/profile_context_switches.md.
57///
58/// ## Static configuration example:
59///
60/// @snippet components/common_component_list_test.cpp Sample components manager config component config
61
62// clang-format on
63class ManagerControllerComponent final : public impl::ComponentBase {
64 public:
65 ManagerControllerComponent(const components::ComponentConfig& config,
66 const components::ComponentContext& context);
67
68 ~ManagerControllerComponent() override;
69
70 static constexpr std::string_view kName = "manager-controller";
71
72 private:
73 void WriteStatistics(utils::statistics::Writer& writer);
74
75 void OnConfigUpdate(const dynamic_config::Snapshot& cfg);
76
77 const components::Manager& components_manager_;
78 utils::statistics::Entry statistics_holder_;
79 concurrent::AsyncEventSubscriberScope config_subscription_;
80};
81
82template <>
83inline constexpr auto kConfigFileMode<ManagerControllerComponent> =
85
86} // namespace components
87
88USERVER_NAMESPACE_END