Skip to content

Commit

Permalink
Fix leaky kind filters in configs dispatcher (#9917)
Browse files Browse the repository at this point in the history
  • Loading branch information
Enjection authored Oct 1, 2024
1 parent 7965c9b commit 06b0711
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions ydb/core/cms/console/configs_dispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -928,7 +928,7 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigSubscriptionNotification::T
if (subscription->Yaml && YamlConfigEnabled) {
ReplaceConfigItems(YamlProtoConfig, trunc, FilterKinds(subscription->Kinds), BaseConfig);
} else {
Y_FOR_EACH_BIT(kind, kinds) {
Y_FOR_EACH_BIT(kind, FilterKinds(kinds)) {
if (affectedKinds.contains(kind)) {
hasAffectedKinds = true;
}
Expand All @@ -942,15 +942,15 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigSubscriptionNotification::T
ReplaceConfigItems(ev->Get()->Record.GetConfig(), trunc, FilterKinds(kinds), BaseConfig);
}

if (hasAffectedKinds || !CompareConfigs(subscription->CurrentConfig.Config, trunc) || CurrentStateFunc() == &TThis::StateInit) {
if (hasAffectedKinds || !CompareConfigs(subscription->CurrentConfig.Config, trunc, FilterKinds(kinds)) || CurrentStateFunc() == &TThis::StateInit) {
subscription->UpdateInProcess = MakeHolder<TEvConsole::TEvConfigNotificationRequest>();
subscription->UpdateInProcess->Record.MutableConfig()->CopyFrom(trunc);
subscription->UpdateInProcess->Record.SetLocal(true);
Y_FOR_EACH_BIT(kind, kinds) {
Y_FOR_EACH_BIT(kind, FilterKinds(kinds)) {
subscription->UpdateInProcess->Record.AddItemKinds(kind);
}
subscription->UpdateInProcessCookie = ++NextRequestCookie;
subscription->UpdateInProcessConfigVersion = FilterVersion(ev->Get()->Record.GetConfig().GetVersion(), kinds);
subscription->UpdateInProcessConfigVersion = FilterVersion(ev->Get()->Record.GetConfig().GetVersion(), FilterKinds(kinds));

if (YamlConfigEnabled) {
UpdateYamlVersion(subscription);
Expand Down Expand Up @@ -1047,6 +1047,12 @@ void TConfigsDispatcher::Handle(TEvConfigsDispatcher::TEvSetConfigSubscriptionRe
"SetConfigSubscriptionRequest handler");
Y_UNUSED(nonYamlKinds);
auto kinds = KindsToBitMap(ev->Get()->ConfigItemKinds);

auto truncKinds = FilterKinds(kinds);
if (truncKinds.Empty() && !kinds.Empty()) {
return;
}

auto subscriberActor = ev->Get()->Subscriber ? ev->Get()->Subscriber : ev->Sender;

auto subscription = FindSubscription(kinds);
Expand Down

0 comments on commit 06b0711

Please sign in to comment.