88#include < ydb/core/tx/scheme_cache/scheme_cache.h>
99
1010#include < ydb/public/api/grpc/ydb_scheme_v1.grpc.pb.h>
11+ #include < ydb/public/api/grpc/draft/ydb_dynamic_config_v1.grpc.pb.h>
12+ #include < ydb/services/dynamic_config/grpc_service.h>
1113
1214#include < ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/resources/ydb_resources.h>
1315
2022#include < grpcpp/create_channel.h>
2123
2224#include < util/string/builder.h>
25+ #include < util/system/thread.h>
2326
2427#include < functional>
2528
@@ -70,7 +73,9 @@ class TBasicKikimrWithGrpcAndRootSchema {
7073 }
7174 ServerSettings->Formats = new NKikimr::TFormatFactory;
7275 ServerSettings->FeatureFlags = appConfig.GetFeatureFlags();
76+ ServerSettings->SetEnableFeatureFlagsConfigurator(true);
7377 ServerSettings->RegisterGrpcService<NKikimr::NGRpcService::TConfigGRpcService>(" bsconfig" );
78+ ServerSettings->RegisterGrpcService<NKikimr::NGRpcService::TGRpcDynamicConfigService>(" dynconfig" , std::nullopt, true);
7479
7580 Server_.Reset(new NKikimr::Tests::TServer(*ServerSettings));
7681 Tenants_.Reset(new NKikimr::Tests::TTenants(Server_));
@@ -83,7 +88,7 @@ class TBasicKikimrWithGrpcAndRootSchema {
8388 //Server_->GetRuntime()->SetLogPriority(NKikimrServices::TX_PROXY, NActors::NLog::PRI_DEBUG);
8489 Server_->GetRuntime()->SetLogPriority(NKikimrServices::GRPC_SERVER, NActors::NLog::PRI_DEBUG);
8590 Server_->GetRuntime()->SetLogPriority(NKikimrServices::GRPC_PROXY, NActors::NLog::PRI_DEBUG);
86- Server_->GetRuntime()->SetLogPriority(NKikimrServices::BSCONFIG , NActors::NLog::PRI_DEBUG);
91+ Server_->GetRuntime()->SetLogPriority(NKikimrServices::BS_CONTROLLER , NActors::NLog::PRI_DEBUG);
8792 Server_->GetRuntime()->SetLogPriority(NKikimrServices::BOOTSTRAPPER, NActors::NLog::PRI_DEBUG);
8893 //Server_->GetRuntime()->SetLogPriority(NKikimrServices::STATESTORAGE, NActors::NLog::PRI_DEBUG);
8994 //Server_->GetRuntime()->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_DEBUG);
@@ -340,6 +345,71 @@ selector_config: []
340345 UNIT_ASSERT(!yamlConfigFetched);
341346 UNIT_ASSERT(!storageYamlConfigFetched);
342347 }
348+
349+ Y_UNIT_TEST(CheckV1IsBlocked) {
350+ TKikimrWithGrpcAndRootSchema server;
351+ TString yamlConfig = R" (
352+ metadata:
353+ kind: MainConfig
354+ cluster: " "
355+ version: 0
356+
357+ config:
358+ host_configs:
359+ - host_config_id: 1
360+ drive:
361+ - path: SectorMap:1 :64
362+ type: SSD
363+ - path: SectorMap:2 :64
364+ type: SSD
365+ - host_config_id: 2
366+ drive:
367+ - path: SectorMap:3 :64
368+ type: SSD
369+ hosts:
370+ - host: ::1
371+ port: 12001
372+ host_config_id: 2
373+ feature_flags:
374+ switch_to_config_v2: true
375+ )" ;
376+ ReplaceConfig(server.GetChannel(), yamlConfig, std::nullopt, std::nullopt, false,
377+ [](const auto& resp) {
378+ UNIT_ASSERT_CHECK_STATUS(resp.operation(), Ydb::StatusIds::SUCCESS);
379+ });
380+ std::optional<TString> yamlConfigFetched, storageYamlConfigFetched;
381+ FetchConfig(server.GetChannel(), false, false, yamlConfigFetched, storageYamlConfigFetched);
382+ UNIT_ASSERT(yamlConfigFetched);
383+ UNIT_ASSERT(!storageYamlConfigFetched);
384+ UNIT_ASSERT_VALUES_EQUAL(yamlConfig, *yamlConfigFetched);
385+
386+ auto* runtime = server.GetRuntime();
387+ bool switchToConfigV2 = false;
388+ for (int i = 0; i < 10; ++i) {
389+ auto& appData = runtime->GetAppData(0);
390+ if (appData.FeatureFlags.GetSwitchToConfigV2()) {
391+ switchToConfigV2 = true;
392+ break;
393+ }
394+ Sleep(TDuration::MilliSeconds(100));
395+ }
396+ UNIT_ASSERT(switchToConfigV2);
397+
398+ std::unique_ptr<Ydb::DynamicConfig::V1::DynamicConfigService::Stub> stub;
399+ stub = Ydb::DynamicConfig::V1::DynamicConfigService::NewStub(server.GetChannel());
400+
401+ Ydb::DynamicConfig::ReplaceConfigRequest request;
402+ request.set_config(yamlConfig);
403+
404+ Ydb::DynamicConfig::ReplaceConfigResponse response;
405+ grpc::ClientContext context;
406+ AdjustCtxForDB(context);
407+
408+ stub->ReplaceConfig(&context, request, &response);
409+
410+ UNIT_ASSERT_CHECK_STATUS(response.operation(), Ydb::StatusIds::BAD_REQUEST);
411+ UNIT_ASSERT_STRING_CONTAINS(response.operation().issues(0).message(), " Dynamic Config V1 is disabled. Use V2 API." );
412+ }
343413}
344414
345415} // NKikimr::NGRpcService
0 commit comments