@@ -133,12 +133,7 @@ class TConfigsDispatcher : public TActorBootstrapped<TConfigsDispatcher> {
133133 return NKikimrServices::TActivity::CONFIGS_DISPATCHER_ACTOR;
134134 }
135135
136- TConfigsDispatcher (
137- const NKikimrConfig::TAppConfig &config,
138- const TMap<TString, TString> &labels,
139- const NKikimrConfig::TAppConfig &initialCmsConfig,
140- const NKikimrConfig::TAppConfig &initialCmsYamlConfig,
141- const THashMap<ui32, TConfigItemInfo> &configInitInfo);
136+ TConfigsDispatcher (const TConfigsDispatcherInitInfo& initInfo);
142137
143138 void Bootstrap ();
144139
@@ -163,6 +158,8 @@ class TConfigsDispatcher : public TActorBootstrapped<TConfigsDispatcher> {
163158
164159 NKikimrConfig::TAppConfig ParseYamlProtoConfig ();
165160
161+ TDynBitMap FilterKinds (const TDynBitMap& in);
162+
166163 void Handle (NMon::TEvHttpInfo::TPtr &ev);
167164 void Handle (TEvInterconnect::TEvNodesInfo::TPtr &ev);
168165 void Handle (TEvConsole::TEvConfigSubscriptionNotification::TPtr &ev);
@@ -230,12 +227,11 @@ class TConfigsDispatcher : public TActorBootstrapped<TConfigsDispatcher> {
230227
231228
232229private:
233- TMap<TString, TString> Labels;
234- const NKikimrConfig::TAppConfig InitialConfig;
230+ const TMap<TString, TString> Labels;
231+ const std::variant<std::monostate, TDenyList, TAllowList> ItemsServeRules;
232+ const NKikimrConfig::TAppConfig BaseConfig;
235233 NKikimrConfig::TAppConfig CurrentConfig;
236- const NKikimrConfig::TAppConfig InitialCmsConfig;
237- const NKikimrConfig::TAppConfig InitialCmsYamlConfig;
238- const THashMap<ui32, TConfigItemInfo> ConfigInitInfo;
234+ const std::optional<TDebugInfo> DebugInfo;
239235 ui64 NextRequestCookie;
240236 TVector<TActorId> HttpRequests;
241237 TActorId CommonSubscriptionClient;
@@ -255,21 +251,14 @@ class TConfigsDispatcher : public TActorBootstrapped<TConfigsDispatcher> {
255251
256252};
257253
258- TConfigsDispatcher::TConfigsDispatcher (
259- const NKikimrConfig::TAppConfig &config,
260- const TMap<TString, TString> &labels,
261- const NKikimrConfig::TAppConfig &initialCmsConfig,
262- const NKikimrConfig::TAppConfig &initialCmsYamlConfig,
263- const THashMap<ui32, TConfigItemInfo> &configInitInfo)
264- : Labels(labels)
265- , InitialConfig(config)
266- , CurrentConfig(config)
267- , InitialCmsConfig(initialCmsConfig)
268- , InitialCmsYamlConfig(initialCmsYamlConfig)
269- , ConfigInitInfo(configInitInfo)
254+ TConfigsDispatcher::TConfigsDispatcher (const TConfigsDispatcherInitInfo& initInfo)
255+ : Labels(initInfo.Labels)
256+ , ItemsServeRules(initInfo.ItemsServeRules)
257+ , BaseConfig(initInfo.InitialConfig)
258+ , CurrentConfig(initInfo.InitialConfig)
259+ , DebugInfo(initInfo.DebugInfo)
270260 , NextRequestCookie(Now().GetValue())
271- {
272- }
261+ {}
273262
274263void TConfigsDispatcher::Bootstrap ()
275264{
@@ -400,9 +389,12 @@ void TConfigsDispatcher::ReplyMonJson(TActorId mailbox) {
400389 response.InsertValue (" yaml_config" , YamlConfig);
401390 response.InsertValue (" resolved_json_config" , NJson::ReadJsonFastTree (ResolvedJsonConfig, true ));
402391 response.InsertValue (" current_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (CurrentConfig, NYamlConfig::GetProto2JsonConfig ()), true ));
403- response.InsertValue (" initial_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (InitialConfig, NYamlConfig::GetProto2JsonConfig ()), true ));
404- response.InsertValue (" initial_cms_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (InitialCmsConfig, NYamlConfig::GetProto2JsonConfig ()), true ));
405- response.InsertValue (" initial_cms_yaml_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (InitialCmsYamlConfig, NYamlConfig::GetProto2JsonConfig ()), true ));
392+
393+ if (DebugInfo) {
394+ response.InsertValue (" initial_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (DebugInfo->StaticConfig , NYamlConfig::GetProto2JsonConfig ()), true ));
395+ response.InsertValue (" initial_cms_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (DebugInfo->OldDynConfig , NYamlConfig::GetProto2JsonConfig ()), true ));
396+ response.InsertValue (" initial_cms_yaml_json_config" , NJson::ReadJsonFastTree (NProtobufJson::Proto2Json (DebugInfo->NewDynConfig , NYamlConfig::GetProto2JsonConfig ()), true ));
397+ }
406398
407399 NJson::WriteJson (&str, &response, {});
408400
@@ -419,6 +411,29 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigNotificationRequest::TPtr &
419411 Send (ev->Sender , resp.Release (), 0 , ev->Cookie );
420412}
421413
414+
415+ TDynBitMap TConfigsDispatcher::FilterKinds (const TDynBitMap& in) {
416+ TDynBitMap out;
417+
418+ if (const auto * denyList = std::get_if<TDenyList>(&ItemsServeRules)) {
419+ Y_FOR_EACH_BIT (kind, in) {
420+ if (!denyList->Items .contains (kind)) {
421+ out.Set (kind);
422+ }
423+ }
424+ } else if (const auto * allowList = std::get_if<TAllowList>(&ItemsServeRules)) {
425+ Y_FOR_EACH_BIT (kind, in) {
426+ if (allowList->Items .contains (kind)) {
427+ out.Set (kind);
428+ }
429+ }
430+ } else {
431+ out = in;
432+ }
433+
434+ return out;
435+ }
436+
422437void TConfigsDispatcher::Handle (TEvInterconnect::TEvNodesInfo::TPtr &ev)
423438{
424439 Y_UNUSED (ev);
@@ -494,14 +509,14 @@ void TConfigsDispatcher::Handle(TEvInterconnect::TEvNodesInfo::TPtr &ev)
494509 str << " Coloring: \" <font color=\" red\" >config not set</font>\" ,"
495510 << " \" <font color=\" green\" >config set in dynamic config</font>\" , \" <font color=\" #007bff\" >config set in static config</font>\" " << Endl;
496511 str << " </div>" << Endl;
497- NHttp::OutputRichConfigHTML (str, InitialConfig , YamlProtoConfig, CurrentConfig, DYNAMIC_KINDS, NON_YAML_KINDS, YamlConfigEnabled);
512+ NHttp::OutputRichConfigHTML (str, BaseConfig , YamlProtoConfig, CurrentConfig, DYNAMIC_KINDS, NON_YAML_KINDS, YamlConfigEnabled);
498513 }
499514 str << " <br />" << Endl;
500515 COLLAPSED_REF_CONTENT (" effective-startup-config" , " Effective startup config" ) {
501516 str << " <div class=\" alert alert-primary tab-left\" role=\" alert\" >" << Endl;
502517 str << " Some of these configs may be overwritten by dynamic ones." << Endl;
503518 str << " </div>" << Endl;
504- NHttp::OutputConfigHTML (str, InitialConfig );
519+ NHttp::OutputConfigHTML (str, BaseConfig );
505520 }
506521 str << " <br />" << Endl;
507522 COLLAPSED_REF_CONTENT (" effective-dynamic-config" , " Effective dynamic config" ) {
@@ -510,18 +525,26 @@ void TConfigsDispatcher::Handle(TEvInterconnect::TEvNodesInfo::TPtr &ev)
510525 str << " </div>" << Endl;
511526 NKikimrConfig::TAppConfig trunc;
512527 if (YamlConfigEnabled) {
513- ReplaceConfigItems (YamlProtoConfig, trunc, KindsToBitMap (DYNAMIC_KINDS), InitialConfig );
514- ReplaceConfigItems (CurrentConfig, trunc, KindsToBitMap (NON_YAML_KINDS), trunc, false );
528+ ReplaceConfigItems (YamlProtoConfig, trunc, FilterKinds ( KindsToBitMap (DYNAMIC_KINDS)), BaseConfig );
529+ ReplaceConfigItems (CurrentConfig, trunc, FilterKinds ( KindsToBitMap (NON_YAML_KINDS) ), trunc, false );
515530 } else {
516- ReplaceConfigItems (CurrentConfig, trunc, KindsToBitMap (DYNAMIC_KINDS), InitialConfig );
531+ ReplaceConfigItems (CurrentConfig, trunc, FilterKinds ( KindsToBitMap (DYNAMIC_KINDS)), BaseConfig );
517532 }
518533 NHttp::OutputConfigHTML (str, trunc);
519534 }
520535 str << " <br />" << Endl;
521536 COLLAPSED_REF_CONTENT (" debug-info" , " Debug info" ) {
522537 DIV_CLASS (" tab-left" ) {
523538 COLLAPSED_REF_CONTENT (" effective-config-debug-info" , " Effective config debug info" ) {
524- NHttp::OutputConfigDebugInfoHTML (str, InitialConfig, YamlProtoConfig, CurrentConfig, ConfigInitInfo, DYNAMIC_KINDS, NON_YAML_KINDS, YamlConfigEnabled);
539+ NHttp::OutputConfigDebugInfoHTML (
540+ str,
541+ BaseConfig,
542+ YamlProtoConfig,
543+ CurrentConfig,
544+ {DebugInfo ? DebugInfo->InitInfo : THashMap<ui32, TConfigItemInfo>{}},
545+ DYNAMIC_KINDS,
546+ NON_YAML_KINDS,
547+ YamlConfigEnabled);
525548 }
526549 str << " <br />" << Endl;
527550 COLLAPSED_REF_CONTENT (" state" , " State" ) {
@@ -651,15 +674,17 @@ void TConfigsDispatcher::Handle(TEvInterconnect::TEvNodesInfo::TPtr &ev)
651674 }
652675 str << " <br />" << Endl;
653676 COLLAPSED_REF_CONTENT (" initial-config" , " Initial config" ) {
654- NHttp::OutputConfigHTML (str, InitialConfig );
677+ NHttp::OutputConfigHTML (str, BaseConfig );
655678 }
656- str << " <br />" << Endl;
657- COLLAPSED_REF_CONTENT (" initial-cms-config" , " Initial CMS config" ) {
658- NHttp::OutputConfigHTML (str, InitialCmsConfig);
659- }
660- str << " <br />" << Endl;
661- COLLAPSED_REF_CONTENT (" initial-cms-yaml-config" , " Initial CMS YAML config" ) {
662- NHttp::OutputConfigHTML (str, InitialCmsYamlConfig);
679+ if (DebugInfo) {
680+ str << " <br />" << Endl;
681+ COLLAPSED_REF_CONTENT (" initial-cms-config" , " Initial CMS config" ) {
682+ NHttp::OutputConfigHTML (str, DebugInfo->OldDynConfig );
683+ }
684+ str << " <br />" << Endl;
685+ COLLAPSED_REF_CONTENT (" initial-cms-yaml-config" , " Initial CMS YAML config" ) {
686+ NHttp::OutputConfigHTML (str, DebugInfo->NewDynConfig );
687+ }
663688 }
664689 }
665690 }
@@ -742,7 +767,7 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigSubscriptionNotification::T
742767 bool hasAffectedKinds = false ;
743768
744769 if (subscription->Yaml && YamlConfigEnabled) {
745- ReplaceConfigItems (YamlProtoConfig, trunc, subscription->Kinds , InitialConfig );
770+ ReplaceConfigItems (YamlProtoConfig, trunc, FilterKinds ( subscription->Kinds ), BaseConfig );
746771 } else {
747772 Y_FOR_EACH_BIT (kind, kinds) {
748773 if (affectedKinds.contains (kind)) {
@@ -755,7 +780,7 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigSubscriptionNotification::T
755780 continue ;
756781 }
757782
758- ReplaceConfigItems (ev->Get ()->Record .GetConfig (), trunc, kinds, InitialConfig );
783+ ReplaceConfigItems (ev->Get ()->Record .GetConfig (), trunc, FilterKinds ( kinds), BaseConfig );
759784 }
760785
761786 if (hasAffectedKinds || !CompareConfigs (subscription->CurrentConfig .Config , trunc) || CurrentStateFunc () == &TThis::StateInit) {
@@ -820,9 +845,9 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvGetConfigRequest::TPtr
820845 auto trunc = std::make_shared<NKikimrConfig::TAppConfig>();
821846 auto kinds = KindsToBitMap (ev->Get ()->ConfigItemKinds );
822847 if (YamlConfigEnabled && yamlKinds) {
823- ReplaceConfigItems (YamlProtoConfig, *trunc, kinds, InitialConfig );
848+ ReplaceConfigItems (YamlProtoConfig, *trunc, FilterKinds ( kinds), BaseConfig );
824849 } else {
825- ReplaceConfigItems (CurrentConfig, *trunc, kinds, InitialConfig );
850+ ReplaceConfigItems (CurrentConfig, *trunc, FilterKinds ( kinds), BaseConfig );
826851 }
827852 resp->Config = trunc;
828853
@@ -893,9 +918,9 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvSetConfigSubscriptionRe
893918 subscription->UpdateInProcess = MakeHolder<TEvConsole::TEvConfigNotificationRequest>();
894919 NKikimrConfig::TAppConfig trunc;
895920 if (YamlConfigEnabled) {
896- ReplaceConfigItems (YamlProtoConfig, trunc, kinds, InitialConfig );
921+ ReplaceConfigItems (YamlProtoConfig, trunc, FilterKinds ( kinds), BaseConfig );
897922 } else {
898- ReplaceConfigItems (CurrentConfig, trunc, kinds, InitialConfig );
923+ ReplaceConfigItems (CurrentConfig, trunc, FilterKinds ( kinds), BaseConfig );
899924 }
900925 subscription->UpdateInProcess ->Record .MutableConfig ()->CopyFrom (trunc);
901926 Y_FOR_EACH_BIT (kind, kinds) {
@@ -997,14 +1022,8 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvGetNodeLabelsRequest::TPtr &ev) {
9971022 Send (ev->Sender , Response.Release ());
9981023}
9991024
1000- IActor *CreateConfigsDispatcher (
1001- const NKikimrConfig::TAppConfig &config,
1002- const TMap<TString, TString> &labels,
1003- const NKikimrConfig::TAppConfig &initialCmsConfig,
1004- const NKikimrConfig::TAppConfig &initialCmsYamlConfig,
1005- const THashMap<ui32, TConfigItemInfo> &configInitInfo)
1006- {
1007- return new TConfigsDispatcher (config, labels, initialCmsConfig, initialCmsYamlConfig, configInitInfo);
1025+ IActor *CreateConfigsDispatcher (const TConfigsDispatcherInitInfo& initInfo) {
1026+ return new TConfigsDispatcher (initInfo);
10081027}
10091028
10101029} // namespace NKikimr::NConsole
0 commit comments