diff options
author | innokentii <innokentii@ydb.tech> | 2023-12-04 23:07:39 +0300 |
---|---|---|
committer | innokentii <innokentii@ydb.tech> | 2023-12-05 07:43:28 +0300 |
commit | d287ea81ce0e08a8db8839a7d764c7178c1086c6 (patch) | |
tree | cb27394c46296b9d813a3312e0af2d496a01628e | |
parent | 13a0c7240bec3fb689296001a29f836bd7c5abfe (diff) | |
download | ydb-d287ea81ce0e08a8db8839a7d764c7178c1086c6.tar.gz |
Fix yaml handling for non subscribers
fix yaml handling for non subscribers
-rw-r--r-- | ydb/core/cms/console/configs_dispatcher.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/ydb/core/cms/console/configs_dispatcher.cpp b/ydb/core/cms/console/configs_dispatcher.cpp index 2f4cad0111..db85bbe440 100644 --- a/ydb/core/cms/console/configs_dispatcher.cpp +++ b/ydb/core/cms/console/configs_dispatcher.cpp @@ -152,6 +152,13 @@ public: void UpdateYamlVersion(const TSubscription::TPtr &kinds) const; + struct TCheckKindsResult { + bool HasYamlKinds = false; + bool HasNonYamlKinds = false; + }; + + TCheckKindsResult CheckKinds(const TVector<ui32>& kinds, const char* errorContext) const; + NKikimrConfig::TAppConfig ParseYamlProtoConfig(); void Handle(NMon::TEvHttpInfo::TPtr &ev); @@ -760,16 +767,17 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvGetConfigRequest::TPtr { auto resp = MakeHolder<TEvConfigsDispatcher::TEvGetConfigResponse>(); - for (auto kind : ev->Get()->ConfigItemKinds) { - if (!DYNAMIC_KINDS.contains(kind)) { - TStringStream sstr; - sstr << static_cast<NKikimrConsole::TConfigItem::EKind>(kind); - Y_ABORT("unexpected kind in GetConfigRequest: %s", sstr.Str().data()); - } - } + auto [yamlKinds, _] = CheckKinds( + ev->Get()->ConfigItemKinds, + "TEvGetConfigRequest handler"); auto trunc = std::make_shared<NKikimrConfig::TAppConfig>(); - ReplaceConfigItems(CurrentConfig, *trunc, KindsToBitMap(ev->Get()->ConfigItemKinds), InitialConfig); + auto kinds = KindsToBitMap(ev->Get()->ConfigItemKinds); + if (YamlConfigEnabled && yamlKinds) { + ReplaceConfigItems(YamlProtoConfig, *trunc, kinds, InitialConfig); + } else { + ReplaceConfigItems(CurrentConfig, *trunc, kinds, InitialConfig); + } resp->Config = trunc; BLOG_TRACE("Send TEvConfigsDispatcher::TEvGetConfigResponse" @@ -778,15 +786,14 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvGetConfigRequest::TPtr Send(ev->Sender, std::move(resp), 0, ev->Cookie); } -void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvSetConfigSubscriptionRequest::TPtr &ev) -{ +TConfigsDispatcher::TCheckKindsResult TConfigsDispatcher::CheckKinds(const TVector<ui32>& kinds, const char* errorContext) const { bool yamlKinds = false; bool nonYamlKinds = false; - for (auto kind : ev->Get()->ConfigItemKinds) { + for (auto kind : kinds) { if (!DYNAMIC_KINDS.contains(kind)) { TStringStream sstr; sstr << static_cast<NKikimrConsole::TConfigItem::EKind>(kind); - Y_ABORT("unexpected kind in SetConfigSubscriptionRequest: %s", sstr.Str().data()); + Y_ABORT("unexpected kind in %s: %s", errorContext, sstr.Str().data()); } if (NON_YAML_KINDS.contains(kind)) { @@ -797,9 +804,18 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvSetConfigSubscriptionRe } if (yamlKinds && nonYamlKinds) { - Y_ABORT("both yaml and non yaml kinds in SetConfigSubscriptionRequest"); + Y_ABORT("both yaml and non yaml kinds in %s", errorContext); } + return {yamlKinds, nonYamlKinds}; +} + +void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvSetConfigSubscriptionRequest::TPtr &ev) +{ + auto [yamlKinds, nonYamlKinds] = CheckKinds( + ev->Get()->ConfigItemKinds, + "SetConfigSubscriptionRequest handler"); + Y_UNUSED(nonYamlKinds); auto kinds = KindsToBitMap(ev->Get()->ConfigItemKinds); auto subscriberActor = ev->Get()->Subscriber ? ev->Get()->Subscriber : ev->Sender; |