diff options
author | auzhegov <auzhegov@yandex-team.com> | 2023-08-07 18:32:36 +0300 |
---|---|---|
committer | auzhegov <auzhegov@yandex-team.com> | 2023-08-07 21:21:59 +0300 |
commit | cd3be4969549639f46002004e670f64424e7f2f8 (patch) | |
tree | 77739702849d6f90a17a80d2ed280c8904dba5ba | |
parent | 5d24f77351bfdc93dab16732f73aad2c6254d1e3 (diff) | |
download | ydb-cd3be4969549639f46002004e670f64424e7f2f8.tar.gz |
enable compute selection based on FolderId
-rw-r--r-- | ydb/core/fq/libs/actors/pending_fetcher.cpp | 3 | ||||
-rw-r--r-- | ydb/core/fq/libs/compute/common/config.h | 65 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/CMakeLists.darwin-x86_64.txt | 13 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/CMakeLists.linux-aarch64.txt | 13 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/CMakeLists.linux-x86_64.txt | 13 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/CMakeLists.windows-x86_64.txt | 13 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/activation.proto | 13 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/compute.proto | 20 | ||||
-rw-r--r-- | ydb/core/fq/libs/config/protos/ya.make | 1 | ||||
-rw-r--r-- | ydb/core/fq/libs/control_plane_proxy/control_plane_proxy.cpp | 50 |
10 files changed, 147 insertions, 57 deletions
diff --git a/ydb/core/fq/libs/actors/pending_fetcher.cpp b/ydb/core/fq/libs/actors/pending_fetcher.cpp index 3e7c660e63b..a584951edc8 100644 --- a/ydb/core/fq/libs/actors/pending_fetcher.cpp +++ b/ydb/core/fq/libs/actors/pending_fetcher.cpp @@ -41,7 +41,6 @@ #include <ydb/public/sdk/cpp/client/ydb_driver/driver.h> #include <ydb/public/sdk/cpp/client/ydb_value/value.h> #include <ydb/public/sdk/cpp/client/ydb_result/result.h> -#include <ydb/public/lib/fq/scope.h> #include <ydb/core/fq/libs/common/compression.h> #include <ydb/core/fq/libs/common/entity_id.h> @@ -398,7 +397,7 @@ private: ); auto runActorId = - ComputeConfig.GetComputeType(task) == NConfig::EComputeType::YDB + ComputeConfig.GetComputeType(task.query_type(), task.scope()) == NConfig::EComputeType::YDB ? Register(CreateYdbRunActor(std::move(params), queryCounters)) : Register(CreateRunActor(SelfId(), queryCounters, std::move(params))); diff --git a/ydb/core/fq/libs/compute/common/config.h b/ydb/core/fq/libs/compute/common/config.h index d8cac7d8713..f735dcdeeb3 100644 --- a/ydb/core/fq/libs/compute/common/config.h +++ b/ydb/core/fq/libs/compute/common/config.h @@ -1,11 +1,10 @@ #pragma once #include <ydb/core/fq/libs/config/protos/compute.pb.h> -#include <ydb/core/fq/libs/protos/fq_private.pb.h> - -#include <util/generic/algorithm.h> #include <util/digest/multi.h> +#include <util/generic/algorithm.h> +#include <util/generic/yexception.h> namespace NFq { @@ -13,24 +12,40 @@ class TComputeConfig { public: explicit TComputeConfig(const NFq::NConfig::TComputeConfig& computeConfig) : ComputeConfig(computeConfig) - {} + , DefaultCompute(ComputeConfig.GetDefaultCompute() != NFq::NConfig::EComputeType::UNKNOWN + ? ComputeConfig.GetDefaultCompute() + : NFq::NConfig::EComputeType::IN_PLACE) { + for (const auto& mapping : ComputeConfig.GetComputeMapping()) { + if (mapping.HasActivation()) { + auto percentage = mapping.GetActivation().GetPercentage(); + Y_ENSURE(percentage == 0 || percentage == 100, + "Activation percentage must be either 0 or 100"); + } + } + } - NFq::NConfig::EComputeType GetComputeType(const Fq::Private::GetTaskResult::Task& task) const { - for (const auto& rule: ComputeConfig.GetComputeMapping().GetRule()) { - const bool isMatched = AllOf(rule.GetKey(), - [&task](const auto& key) { - switch (key.key_case()) { - case NConfig::TComputeMappingRuleKey::kQueryType: - return key.GetQueryType() == task.query_type(); - case NConfig::TComputeMappingRuleKey::KEY_NOT_SET: - return false; + NFq::NConfig::EComputeType GetComputeType(const FederatedQuery::QueryContent::QueryType queryType, const TString& scope) const { + for (const auto& mapping : ComputeConfig.GetComputeMapping()) { + if (mapping.GetQueryType() == queryType) { + if (mapping.HasActivation()) { + const auto& activation = mapping.GetActivation(); + const auto& includeScopes = activation.GetIncludeScopes(); + const auto& excludeScopes = activation.GetExcludeScopes(); + auto isActivatedCase1 = + activation.GetPercentage() == 0 && + Find(includeScopes, scope) == includeScopes.end(); + auto isActivatedCase2 = + activation.GetPercentage() == 100 && + Find(excludeScopes, scope) != excludeScopes.end(); + if (isActivatedCase1 || isActivatedCase2) { + return mapping.GetCompute(); } - }); - if (isMatched) { - return rule.GetCompute(); + } + return mapping.GetCompute(); } } - return NFq::NConfig::EComputeType::IN_PLACE; + + return DefaultCompute; } NFq::NConfig::TYdbStorageConfig GetConnection(const TString& scope) const { @@ -52,11 +67,20 @@ public: if (it != databaseMapping.GetScopeToComputeDatabase().end()) { return it->second.GetConnection(); } - return databaseMapping.GetCommon().empty() ? NFq::NConfig::TYdbStorageConfig{} : databaseMapping.GetCommon(MultiHash(scope) % databaseMapping.GetCommon().size()).GetConnection(); + return databaseMapping.GetCommon().empty() + ? NFq::NConfig::TYdbStorageConfig{} + : databaseMapping + .GetCommon(MultiHash(scope) % databaseMapping.GetCommon().size()) + .GetConnection(); } - bool YdbComputeControlPlaneEnabled() const { - return ComputeConfig.GetYdb().GetEnable() && ComputeConfig.GetYdb().GetControlPlane().GetEnable(); + bool YdbComputeControlPlaneEnabled(const TString& scope) const { + return ComputeConfig.GetYdb().GetEnable() && + ComputeConfig.GetYdb().GetControlPlane().GetEnable() && + (GetComputeType(FederatedQuery::QueryContent::ANALYTICS, scope) == + NFq::NConfig::EComputeType::YDB || + GetComputeType(FederatedQuery::QueryContent::STREAMING, scope) == + NFq::NConfig::EComputeType::YDB); } const NFq::NConfig::TComputeConfig& GetProto() const { @@ -65,6 +89,7 @@ public: private: NFq::NConfig::TComputeConfig ComputeConfig; + NFq::NConfig::EComputeType DefaultCompute; }; } /* NFq */ diff --git a/ydb/core/fq/libs/config/protos/CMakeLists.darwin-x86_64.txt b/ydb/core/fq/libs/config/protos/CMakeLists.darwin-x86_64.txt index 98a204fd31c..af844d5199b 100644 --- a/ydb/core/fq/libs/config/protos/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/fq/libs/config/protos/CMakeLists.darwin-x86_64.txt @@ -282,6 +282,18 @@ get_built_tool_path( contrib/tools/protoc/plugins/cpp_styleguide cpp_styleguide ) +get_built_tool_path( + TOOL_protoc_bin + TOOL_protoc_dependency + contrib/tools/protoc/bin + protoc +) +get_built_tool_path( + TOOL_cpp_styleguide_bin + TOOL_cpp_styleguide_dependency + contrib/tools/protoc/plugins/cpp_styleguide + cpp_styleguide +) add_library(libs-config-protos) target_link_libraries(libs-config-protos PUBLIC @@ -294,6 +306,7 @@ target_link_libraries(libs-config-protos PUBLIC contrib-libs-protobuf ) target_proto_messages(libs-config-protos PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/activation.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/audit.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/checkpoint_coordinator.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/common.proto diff --git a/ydb/core/fq/libs/config/protos/CMakeLists.linux-aarch64.txt b/ydb/core/fq/libs/config/protos/CMakeLists.linux-aarch64.txt index 1ec6d5c4fa6..494977cd87e 100644 --- a/ydb/core/fq/libs/config/protos/CMakeLists.linux-aarch64.txt +++ b/ydb/core/fq/libs/config/protos/CMakeLists.linux-aarch64.txt @@ -282,6 +282,18 @@ get_built_tool_path( contrib/tools/protoc/plugins/cpp_styleguide cpp_styleguide ) +get_built_tool_path( + TOOL_protoc_bin + TOOL_protoc_dependency + contrib/tools/protoc/bin + protoc +) +get_built_tool_path( + TOOL_cpp_styleguide_bin + TOOL_cpp_styleguide_dependency + contrib/tools/protoc/plugins/cpp_styleguide + cpp_styleguide +) add_library(libs-config-protos) target_link_libraries(libs-config-protos PUBLIC @@ -295,6 +307,7 @@ target_link_libraries(libs-config-protos PUBLIC contrib-libs-protobuf ) target_proto_messages(libs-config-protos PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/activation.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/audit.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/checkpoint_coordinator.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/common.proto diff --git a/ydb/core/fq/libs/config/protos/CMakeLists.linux-x86_64.txt b/ydb/core/fq/libs/config/protos/CMakeLists.linux-x86_64.txt index 1ec6d5c4fa6..494977cd87e 100644 --- a/ydb/core/fq/libs/config/protos/CMakeLists.linux-x86_64.txt +++ b/ydb/core/fq/libs/config/protos/CMakeLists.linux-x86_64.txt @@ -282,6 +282,18 @@ get_built_tool_path( contrib/tools/protoc/plugins/cpp_styleguide cpp_styleguide ) +get_built_tool_path( + TOOL_protoc_bin + TOOL_protoc_dependency + contrib/tools/protoc/bin + protoc +) +get_built_tool_path( + TOOL_cpp_styleguide_bin + TOOL_cpp_styleguide_dependency + contrib/tools/protoc/plugins/cpp_styleguide + cpp_styleguide +) add_library(libs-config-protos) target_link_libraries(libs-config-protos PUBLIC @@ -295,6 +307,7 @@ target_link_libraries(libs-config-protos PUBLIC contrib-libs-protobuf ) target_proto_messages(libs-config-protos PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/activation.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/audit.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/checkpoint_coordinator.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/common.proto diff --git a/ydb/core/fq/libs/config/protos/CMakeLists.windows-x86_64.txt b/ydb/core/fq/libs/config/protos/CMakeLists.windows-x86_64.txt index 98a204fd31c..af844d5199b 100644 --- a/ydb/core/fq/libs/config/protos/CMakeLists.windows-x86_64.txt +++ b/ydb/core/fq/libs/config/protos/CMakeLists.windows-x86_64.txt @@ -282,6 +282,18 @@ get_built_tool_path( contrib/tools/protoc/plugins/cpp_styleguide cpp_styleguide ) +get_built_tool_path( + TOOL_protoc_bin + TOOL_protoc_dependency + contrib/tools/protoc/bin + protoc +) +get_built_tool_path( + TOOL_cpp_styleguide_bin + TOOL_cpp_styleguide_dependency + contrib/tools/protoc/plugins/cpp_styleguide + cpp_styleguide +) add_library(libs-config-protos) target_link_libraries(libs-config-protos PUBLIC @@ -294,6 +306,7 @@ target_link_libraries(libs-config-protos PUBLIC contrib-libs-protobuf ) target_proto_messages(libs-config-protos PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/activation.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/audit.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/checkpoint_coordinator.proto ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/config/protos/common.proto diff --git a/ydb/core/fq/libs/config/protos/activation.proto b/ydb/core/fq/libs/config/protos/activation.proto new file mode 100644 index 00000000000..4f64805a88a --- /dev/null +++ b/ydb/core/fq/libs/config/protos/activation.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +option cc_enable_arenas = true; + +package NFq.NConfig; +option java_package = "ru.yandex.kikimr.proto"; + +//////////////////////////////////////////////////////////// + +message TActivationPercentage { + uint32 Percentage = 1; + repeated string IncludeScopes = 2; + repeated string ExcludeScopes = 3; +} diff --git a/ydb/core/fq/libs/config/protos/compute.proto b/ydb/core/fq/libs/config/protos/compute.proto index e200c65998b..2166d7d1b05 100644 --- a/ydb/core/fq/libs/config/protos/compute.proto +++ b/ydb/core/fq/libs/config/protos/compute.proto @@ -4,6 +4,7 @@ option cc_enable_arenas = true; package NFq.NConfig; option java_package = "ru.yandex.kikimr.proto"; +import "ydb/core/fq/libs/config/protos/activation.proto"; import "ydb/core/fq/libs/config/protos/storage.proto"; import "ydb/public/api/protos/draft/fq.proto"; @@ -59,24 +60,15 @@ enum EComputeType { YDB = 2; } -message TComputeMappingRuleKey { - oneof key { - FederatedQuery.QueryContent.QueryType QueryType = 1; - // FederatedQuery.QueryContent.EngineType EngineType = 2; - } -} - -message TComputeMappingRule { - repeated TComputeMappingRuleKey Key = 1; - EComputeType Compute = 2; -} - message TComputeMapping { - repeated TComputeMappingRule Rule = 1; + FederatedQuery.QueryContent.QueryType QueryType = 1; + EComputeType Compute = 2; + TActivationPercentage Activation = 3; } message TComputeConfig { TInPlaceCompute InPlace = 1; TYdbCompute Ydb = 2; - TComputeMapping ComputeMapping = 3; + EComputeType DefaultCompute = 3; + repeated TComputeMapping ComputeMapping = 4; } diff --git a/ydb/core/fq/libs/config/protos/ya.make b/ydb/core/fq/libs/config/protos/ya.make index a71cc23aa53..2bf50a9a41f 100644 --- a/ydb/core/fq/libs/config/protos/ya.make +++ b/ydb/core/fq/libs/config/protos/ya.make @@ -1,6 +1,7 @@ PROTO_LIBRARY() SRCS( + activation.proto audit.proto checkpoint_coordinator.proto common.proto diff --git a/ydb/core/fq/libs/control_plane_proxy/control_plane_proxy.cpp b/ydb/core/fq/libs/control_plane_proxy/control_plane_proxy.cpp index e135721d1da..c2db1d6771e 100644 --- a/ydb/core/fq/libs/control_plane_proxy/control_plane_proxy.cpp +++ b/ydb/core/fq/libs/control_plane_proxy/control_plane_proxy.cpp @@ -413,7 +413,7 @@ public: void Bootstrap() { CPP_LOG_T("Create database bootstrap. CloudId: " << CloudId << " Scope: " << Scope << " Actor id: " << SelfId()); - if (!ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (!ComputeConfig.YdbComputeControlPlaneEnabled(Scope)) { Event->Get()->ComputeDatabase = FederatedQuery::Internal::ComputeDatabaseInternal{}; TActivationContext::Send(Event->Forward(ControlPlaneProxyActorId())); PassAway(); @@ -1310,7 +1310,7 @@ private: return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ev->Get()->RequestValidationPassed) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->RequestValidationPassed) { auto requestValidationIssues = ::NFq::ValidateConnection(ev, Config.StorageConfig.Proto.GetMaxRequestSize(), @@ -1340,7 +1340,7 @@ private: TPermissions::TPermission::MANAGE_PUBLIC }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ydbOperationWasPerformed) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ydbOperationWasPerformed) { if (!ev->Get()->YDBClient) { ev->Get()->YDBClient = CreateNewTableClient(ev, Config.ComputeConfig, @@ -1564,7 +1564,7 @@ private: return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->RequestValidationPassed) { auto requestValidationIssues = ::NFq::ValidateConnection(ev, @@ -1598,19 +1598,19 @@ private: | TPermissions::TPermission::VIEW_PRIVATE }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ev->Get()->OldConnectionContent) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->OldConnectionContent) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDiscoverYDBConnectionName( ControlPlaneProxyActorId(), ev, Counters, Config.RequestTimeout, permissions)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ev->Get()->OldBindingNamesDiscoveryFinished) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->OldBindingNamesDiscoveryFinished) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeListBindingIds( ControlPlaneProxyActorId(), ev, Counters, Config.RequestTimeout, permissions)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && ev->Get()->OldBindingIds.size() != ev->Get()->OldBindingContents.size()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && ev->Get()->OldBindingIds.size() != ev->Get()->OldBindingContents.size()) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDescribeListedBinding( ControlPlaneProxyActorId(), ev, Counters, Config.RequestTimeout, permissions)); @@ -1618,6 +1618,8 @@ private: } const bool controlPlaneYDBOperationWasPerformed = ev->Get()->ControlPlaneYDBOperationWasPerformed; if (!controlPlaneYDBOperationWasPerformed) { + auto shouldReplyWithResponse = + !Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope); Register(new TRequestActor<FederatedQuery::ModifyConnectionRequest, TEvControlPlaneStorage::TEvModifyConnectionRequest, TEvControlPlaneStorage::TEvModifyConnectionResponse, @@ -1629,11 +1631,11 @@ private: requestCounters, probe, availablePermissions, - !Config.ComputeConfig.YdbComputeControlPlaneEnabled())); + shouldReplyWithResponse)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope)) { if (!ev->Get()->YDBClient) { ev->Get()->YDBClient = CreateNewTableClient(ev, Config.ComputeConfig, @@ -1721,7 +1723,7 @@ private: | TPermissions::TPermission::VIEW_PRIVATE }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ev->Get()->ConnectionContent) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->ConnectionContent) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDiscoverYDBConnectionName( ControlPlaneProxyActorId(), ev, Counters, Config.RequestTimeout, permissions)); @@ -1730,6 +1732,8 @@ private: const bool controlPlaneYDBOperationWasPerformed = ev->Get()->ControlPlaneYDBOperationWasPerformed; if (!controlPlaneYDBOperationWasPerformed) { + auto shouldReplyWithResponse = + !Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope); Register(new TRequestActor<FederatedQuery::DeleteConnectionRequest, TEvControlPlaneStorage::TEvDeleteConnectionRequest, TEvControlPlaneStorage::TEvDeleteConnectionResponse, @@ -1741,11 +1745,11 @@ private: requestCounters, probe, availablePermissions, - !Config.ComputeConfig.YdbComputeControlPlaneEnabled())); + shouldReplyWithResponse)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope)) { if (!ev->Get()->YDBClient) { ev->Get()->YDBClient = CreateNewTableClient(ev, Config.ComputeConfig, @@ -1884,7 +1888,7 @@ private: return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->RequestValidationPassed) { auto requestValidationIssues = ::NFq::ValidateBinding(ev, @@ -1916,7 +1920,7 @@ private: | TPermissions::TPermission::MANAGE_PRIVATE }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && !ydbOperationWasPerformed) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ydbOperationWasPerformed) { if (!ev->Get()->ConnectionName) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDiscoverYDBConnectionName( @@ -2137,7 +2141,7 @@ private: return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->RequestValidationPassed) { auto requestValidationIssues = ::NFq::ValidateBinding(ev, @@ -2170,7 +2174,7 @@ private: | TPermissions::TPermission::VIEW_PRIVATE }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope)) { if (!ev->Get()->OldBindingContent) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDiscoverYDBBindingName( @@ -2187,6 +2191,8 @@ private: const bool controlPlaneYDBOperationWasPerformed = ev->Get()->ControlPlaneYDBOperationWasPerformed; if (!controlPlaneYDBOperationWasPerformed) { + auto shouldReplyWithResponse = + !Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope); Register(new TRequestActor<FederatedQuery::ModifyBindingRequest, TEvControlPlaneStorage::TEvModifyBindingRequest, TEvControlPlaneStorage::TEvModifyBindingResponse, @@ -2198,11 +2204,11 @@ private: requestCounters, probe, availablePermissions, - !Config.ComputeConfig.YdbComputeControlPlaneEnabled())); + shouldReplyWithResponse)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope)) { if (!ev->Get()->YDBClient) { ev->Get()->YDBClient = CreateNewTableClient(ev, Config.ComputeConfig, @@ -2287,7 +2293,7 @@ private: | TPermissions::TPermission::VIEW_PRIVATE }; - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled() && + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope) && !ev->Get()->OldBindingName) { auto permissions = ExtractPermissions(ev, availablePermissions); Register(MakeDiscoverYDBBindingName( @@ -2297,6 +2303,8 @@ private: const bool controlPlaneYDBOperationWasPerformed = ev->Get()->ControlPlaneYDBOperationWasPerformed; if (!controlPlaneYDBOperationWasPerformed) { + auto shouldReplyWithResponse = + !Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope); Register(new TRequestActor<FederatedQuery::DeleteBindingRequest, TEvControlPlaneStorage::TEvDeleteBindingRequest, TEvControlPlaneStorage::TEvDeleteBindingResponse, @@ -2308,11 +2316,11 @@ private: requestCounters, probe, availablePermissions, - !Config.ComputeConfig.YdbComputeControlPlaneEnabled())); + shouldReplyWithResponse)); return; } - if (Config.ComputeConfig.YdbComputeControlPlaneEnabled()) { + if (Config.ComputeConfig.YdbComputeControlPlaneEnabled(ev->Get()->Scope)) { if (!ev->Get()->YDBClient) { ev->Get()->YDBClient = CreateNewTableClient(ev, Config.ComputeConfig, |