aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralexvru <alexvru@ydb.tech>2023-08-07 19:46:04 +0300
committeralexvru <alexvru@ydb.tech>2023-08-07 21:58:22 +0300
commit3b06a2541f9d241908c52ade4cdc70cd28c00fa6 (patch)
tree56f9ed48b9e194df33a1eaea15aeecbcc083208c
parent39be171bb25ea0ee82a970b3ddacd128fbb95845 (diff)
downloadydb-3b06a2541f9d241908c52ade4cdc70cd28c00fa6.tar.gz
Support nameservice table update through ConfigsDispatcher KIKIMR-13309
-rw-r--r--ydb/core/cms/console/configs_dispatcher.cpp2
-rw-r--r--ydb/core/driver_lib/run/kikimr_services_initializers.cpp29
-rw-r--r--ydb/core/mind/dynamic_nameserver.cpp37
-rw-r--r--ydb/core/mind/dynamic_nameserver.h6
-rw-r--r--ydb/core/mind/dynamic_nameserver_impl.h8
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;