userver: userver/components/manager_controller_component.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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