diff options
author | alexvru <alexvru@ydb.tech> | 2023-08-07 19:46:04 +0300 |
---|---|---|
committer | alexvru <alexvru@ydb.tech> | 2023-08-07 21:58:22 +0300 |
commit | 3b06a2541f9d241908c52ade4cdc70cd28c00fa6 (patch) | |
tree | 56f9ed48b9e194df33a1eaea15aeecbcc083208c | |
parent | 39be171bb25ea0ee82a970b3ddacd128fbb95845 (diff) | |
download | ydb-3b06a2541f9d241908c52ade4cdc70cd28c00fa6.tar.gz |
Support nameservice table update through ConfigsDispatcher KIKIMR-13309
-rw-r--r-- | ydb/core/cms/console/configs_dispatcher.cpp | 2 | ||||
-rw-r--r-- | ydb/core/driver_lib/run/kikimr_services_initializers.cpp | 29 | ||||
-rw-r--r-- | ydb/core/mind/dynamic_nameserver.cpp | 37 | ||||
-rw-r--r-- | ydb/core/mind/dynamic_nameserver.h | 6 | ||||
-rw-r--r-- | ydb/core/mind/dynamic_nameserver_impl.h | 8 |
5 files changed, 58 insertions, 24 deletions
diff --git a/ydb/core/cms/console/configs_dispatcher.cpp b/ydb/core/cms/console/configs_dispatcher.cpp index 4385b5c0473..ca171d1cf94 100644 --- a/ydb/core/cms/console/configs_dispatcher.cpp +++ b/ydb/core/cms/console/configs_dispatcher.cpp @@ -46,6 +46,7 @@ const THashSet<ui32> DYNAMIC_KINDS({ (ui32)NKikimrConsole::TConfigItem::ImmediateControlsConfigItem, (ui32)NKikimrConsole::TConfigItem::LogConfigItem, (ui32)NKikimrConsole::TConfigItem::MonitoringConfigItem, + (ui32)NKikimrConsole::TConfigItem::NameserviceConfigItem, (ui32)NKikimrConsole::TConfigItem::NetClassifierDistributableConfigItem, (ui32)NKikimrConsole::TConfigItem::NodeBrokerConfigItem, (ui32)NKikimrConsole::TConfigItem::SchemeShardConfigItem, @@ -57,6 +58,7 @@ const THashSet<ui32> DYNAMIC_KINDS({ }); const THashSet<ui32> NON_YAML_KINDS({ + (ui32)NKikimrConsole::TConfigItem::NameserviceConfigItem, (ui32)NKikimrConsole::TConfigItem::NetClassifierDistributableConfigItem, }); diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp index 7bec6054db1..f023fb68932 100644 --- a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp +++ b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp @@ -624,31 +624,12 @@ void TBasicServicesInitializer::InitializeServices(NActors::TActorSystemSetup* s const TActorId resolverId = NDnsResolver::MakeDnsResolverActorId(); const TActorId nameserviceId = GetNameserviceActorId(); - ui32 numNodes = 0; - TSet<TString> dataCenters; - - TIntrusivePtr<TTableNameserverSetup> table(new TTableNameserverSetup()); - for (const auto &node : nsConfig.GetNode()) { - const ui32 nodeId = node.GetNodeId(); - const TString host = node.HasHost() ? node.GetHost() : TString(); - const ui32 port = node.GetPort(); - - const TString resolveHost = node.HasInterconnectHost() ? - node.GetInterconnectHost() : host; - - // Use ip address only when dns host not specified - const TString addr = resolveHost ? TString() : node.GetAddress(); + TIntrusivePtr<TTableNameserverSetup> table = NNodeBroker::BuildNameserverTable(nsConfig); - TNodeLocation location; - if (node.HasWalleLocation()) { - location = TNodeLocation(node.GetWalleLocation()); - } else if (node.HasLocation()) { - location = TNodeLocation(node.GetLocation()); - } - table->StaticNodeTable[nodeId] = TTableNameserverSetup::TNodeInfo(addr, host, resolveHost, port, location); - - ++numNodes; - dataCenters.insert(location.GetDataCenterId()); + const ui32 numNodes = table->StaticNodeTable.size(); + TSet<TString> dataCenters; + for (const auto& [nodeId, info] : table->StaticNodeTable) { + dataCenters.insert(info.Location.GetDataCenterId()); } NDnsResolver::TOnDemandDnsResolverOptions resolverOptions; diff --git a/ydb/core/mind/dynamic_nameserver.cpp b/ydb/core/mind/dynamic_nameserver.cpp index 5abcd2f7edb..1a29b6e1f2b 100644 --- a/ydb/core/mind/dynamic_nameserver.cpp +++ b/ydb/core/mind/dynamic_nameserver.cpp @@ -137,6 +137,11 @@ void TDynamicNameserver::Bootstrap(const TActorContext &ctx) for (auto &pr : dinfo->Domains) RequestEpochUpdate(pr.first, 1, ctx); + Send(NConsole::MakeConfigsDispatcherID(SelfId().NodeId()), new NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionRequest( + NKikimrConsole::TConfigItem::NameserviceConfigItem, + SelfId() + )); + Become(&TDynamicNameserver::StateFunc); } @@ -429,6 +434,19 @@ void TDynamicNameserver::Handle(TEvPrivate::TEvUpdateEpoch::TPtr &ev, const TAct RequestEpochUpdate(domain, epoch, ctx); } +void TDynamicNameserver::Handle(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse::TPtr /*ev*/) +{} + +void TDynamicNameserver::Handle(NConsole::TEvConsole::TEvConfigNotificationRequest::TPtr ev) { + auto& record = ev->Get()->Record; + if (record.HasConfig()) { + if (const auto& config = record.GetConfig(); config.HasNameserviceConfig()) { + StaticConfig = BuildNameserverTable(config.GetNameserviceConfig()); + } + } + Send(ev->Sender, new NConsole::TEvConsole::TEvConfigNotificationResponse(record), 0, ev->Cookie); +} + IActor *CreateDynamicNameserver(const TIntrusivePtr<TTableNameserverSetup> &setup, ui32 poolId) { return new TDynamicNameserver(setup, poolId); } @@ -438,5 +456,24 @@ IActor *CreateDynamicNameserver(const TIntrusivePtr<TTableNameserverSetup> &setu return new TDynamicNameserver(setup, node, domains, poolId); } +TIntrusivePtr<TTableNameserverSetup> BuildNameserverTable(const NKikimrConfig::TStaticNameserviceConfig& nsConfig) { + auto table = MakeIntrusive<TTableNameserverSetup>(); + for (const auto &node : nsConfig.GetNode()) { + const ui32 nodeId = node.GetNodeId(); + const TString host = node.HasHost() ? node.GetHost() : TString(); + const ui32 port = node.GetPort(); + const TString resolveHost = node.HasInterconnectHost() ? node.GetInterconnectHost() : host; + const TString addr = resolveHost ? TString() : node.GetAddress(); + TNodeLocation location; + if (node.HasWalleLocation()) { + location = TNodeLocation(node.GetWalleLocation()); + } else if (node.HasLocation()) { + location = TNodeLocation(node.GetLocation()); + } + table->StaticNodeTable[nodeId] = TTableNameserverSetup::TNodeInfo(addr, host, resolveHost, port, location); + } + return table; +} + } // NNodeBroker } // NKikimr diff --git a/ydb/core/mind/dynamic_nameserver.h b/ydb/core/mind/dynamic_nameserver.h index 38b9b7e8422..1a1e218df24 100644 --- a/ydb/core/mind/dynamic_nameserver.h +++ b/ydb/core/mind/dynamic_nameserver.h @@ -7,6 +7,10 @@ #include <ydb/core/base/domain.h> #include <ydb/core/protos/node_broker.pb.h> +namespace NKikimrConfig { + class TStaticNameserviceConfig; +} // NKikimrConfig + namespace NKikimr { namespace NNodeBroker { @@ -20,5 +24,7 @@ IActor *CreateDynamicNameserver(const TIntrusivePtr<TTableNameserverSetup> &setu const TDomainsInfo &domains, ui32 poolId = 0); +TIntrusivePtr<TTableNameserverSetup> BuildNameserverTable(const NKikimrConfig::TStaticNameserviceConfig& nsConfig); + } // NNodeBroker } // NKikimr diff --git a/ydb/core/mind/dynamic_nameserver_impl.h b/ydb/core/mind/dynamic_nameserver_impl.h index 438fd76d2ea..9f5dac9a886 100644 --- a/ydb/core/mind/dynamic_nameserver_impl.h +++ b/ydb/core/mind/dynamic_nameserver_impl.h @@ -8,6 +8,8 @@ #include <library/cpp/actors/interconnect/interconnect_impl.h> #include <library/cpp/actors/interconnect/interconnect_address.h> #include <ydb/core/base/tablet_pipe.h> +#include <ydb/core/cms/console/configs_dispatcher.h> +#include <ydb/core/cms/console/console.h> #include <ydb/library/services/services.pb.h> #include <library/cpp/actors/core/hfunc.h> @@ -207,6 +209,9 @@ public: HFunc(TEvNodeBroker::TEvNodesInfo, Handle); HFunc(TEvPrivate::TEvUpdateEpoch, Handle); HFunc(NMon::TEvHttpInfo, Handle); + + hFunc(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse, Handle); + hFunc(NConsole::TEvConsole::TEvConfigNotificationRequest, Handle); } } @@ -239,6 +244,9 @@ private: void Handle(TEvPrivate::TEvUpdateEpoch::TPtr &ev, const TActorContext &ctx); void Handle(NMon::TEvHttpInfo::TPtr &ev, const TActorContext &ctx); + void Handle(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse::TPtr ev); + void Handle(NConsole::TEvConsole::TEvConfigNotificationRequest::TPtr ev); + private: TIntrusivePtr<TTableNameserverSetup> StaticConfig; std::array<TDynamicConfigPtr, DOMAINS_COUNT> DynamicConfigs; |