8#include <unordered_map>
10#include <userver/components/component_base.hpp>
11#include <userver/dynamic_config/source.hpp>
12#include <userver/formats/json.hpp>
13#include <userver/utils/statistics/fwd.hpp>
14#include <userver/utils/statistics/storage.hpp>
16#include <userver/ydb/fwd.hpp>
18#include <ydb-cpp-sdk/client/driver/fwd.h>
20USERVER_NAMESPACE_BEGIN
60class YdbComponent
final :
public components::ComponentBase {
64 static constexpr std::string_view
kName =
"ydb";
66 YdbComponent(
const components::ComponentConfig&,
const components::ComponentContext&);
68 ~YdbComponent()
override;
72 std::shared_ptr<TableClient>
GetTableClient(
const std::string& dbname)
const;
76 std::shared_ptr<TopicClient>
GetTopicClient(
const std::string& dbname)
const;
97 static yaml_config::Schema GetStaticConfigSchema();
100 struct DatabaseUtils;
103 std::shared_ptr<impl::Driver> driver;
104 std::shared_ptr<TableClient> table_client;
105 std::shared_ptr<TopicClient> topic_client;
106 std::shared_ptr<FederatedTopicClient> federated_topic_client;
107 std::shared_ptr<CoordinationClient> coordination_client;
110 void OnConfigUpdate(
const dynamic_config::Snapshot& cfg);
111 void WriteStatistics(utils::statistics::Writer& writer)
const;
112 const Database& FindDatabase(
const std::string& dbname)
const;
114 std::unordered_map<std::string, Database> databases_;
116 dynamic_config::Source config_;
119 concurrent::AsyncEventSubscriberScope config_subscription_;
120 utils::statistics::Entry statistic_holder_;
126inline constexpr bool components::kHasValidate<ydb::YdbComponent> =
true;