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
40class YdbComponent
final :
public components::ComponentBase {
44 static constexpr std::string_view
kName =
"ydb";
46 YdbComponent(
const components::ComponentConfig&,
const components::ComponentContext&);
48 ~YdbComponent()
override;
52 std::shared_ptr<TableClient>
GetTableClient(
const std::string& dbname)
const;
56 std::shared_ptr<TopicClient>
GetTopicClient(
const std::string& dbname)
const;
77 static yaml_config::Schema GetStaticConfigSchema();
83 std::shared_ptr<impl::Driver> driver;
84 std::shared_ptr<TableClient> table_client;
85 std::shared_ptr<TopicClient> topic_client;
86 std::shared_ptr<FederatedTopicClient> federated_topic_client;
87 std::shared_ptr<CoordinationClient> coordination_client;
90 void OnConfigUpdate(
const dynamic_config::Snapshot& cfg);
91 void WriteStatistics(utils::statistics::Writer& writer)
const;
92 const Database& FindDatabase(
const std::string& dbname)
const;
94 std::unordered_map<std::string, Database> databases_;
96 dynamic_config::Source config_;
99 concurrent::AsyncEventSubscriberScope config_subscription_;
100 utils::statistics::Entry statistic_holder_;
106inline constexpr bool components::kHasValidate<ydb::YdbComponent> =
true;