diff options
author | innokentii <innokentii@yandex-team.com> | 2023-04-27 18:10:42 +0300 |
---|---|---|
committer | innokentii <innokentii@yandex-team.com> | 2023-04-27 18:10:42 +0300 |
commit | 9ca91b40d6f45546e20a646d15590c0cc6cc9778 (patch) | |
tree | b08db54e0cc6443ad338afc511310d5bf8e790e2 | |
parent | 2d433e95d0fe94f64586906a5f30e476488e541a (diff) | |
download | ydb-9ca91b40d6f45546e20a646d15590c0cc6cc9778.tar.gz |
Add drop config
fix
Add drop config
24 files changed, 302 insertions, 18 deletions
diff --git a/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt b/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt index 0a471cee3fe..03911aebdf6 100644 --- a/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt @@ -52,6 +52,7 @@ target_sources(core-cms-console PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__cleanup_subscriptions.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__configure.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__create_tenant.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__drop_yaml_config.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__init_scheme.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__load_state.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__get_log_tail.cpp diff --git a/ydb/core/cms/console/CMakeLists.linux-aarch64.txt b/ydb/core/cms/console/CMakeLists.linux-aarch64.txt index 5036d73fd19..98434d97d85 100644 --- a/ydb/core/cms/console/CMakeLists.linux-aarch64.txt +++ b/ydb/core/cms/console/CMakeLists.linux-aarch64.txt @@ -53,6 +53,7 @@ target_sources(core-cms-console PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__cleanup_subscriptions.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__configure.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__create_tenant.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__drop_yaml_config.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__init_scheme.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__load_state.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__get_log_tail.cpp diff --git a/ydb/core/cms/console/CMakeLists.linux-x86_64.txt b/ydb/core/cms/console/CMakeLists.linux-x86_64.txt index 5036d73fd19..98434d97d85 100644 --- a/ydb/core/cms/console/CMakeLists.linux-x86_64.txt +++ b/ydb/core/cms/console/CMakeLists.linux-x86_64.txt @@ -53,6 +53,7 @@ target_sources(core-cms-console PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__cleanup_subscriptions.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__configure.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__create_tenant.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__drop_yaml_config.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__init_scheme.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__load_state.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__get_log_tail.cpp diff --git a/ydb/core/cms/console/CMakeLists.windows-x86_64.txt b/ydb/core/cms/console/CMakeLists.windows-x86_64.txt index 0a471cee3fe..03911aebdf6 100644 --- a/ydb/core/cms/console/CMakeLists.windows-x86_64.txt +++ b/ydb/core/cms/console/CMakeLists.windows-x86_64.txt @@ -52,6 +52,7 @@ target_sources(core-cms-console PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__cleanup_subscriptions.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__configure.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__create_tenant.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__drop_yaml_config.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__init_scheme.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__load_state.cpp ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__get_log_tail.cpp diff --git a/ydb/core/cms/console/configs_dispatcher.cpp b/ydb/core/cms/console/configs_dispatcher.cpp index 2a0078c059f..a83f01ebd6e 100644 --- a/ydb/core/cms/console/configs_dispatcher.cpp +++ b/ydb/core/cms/console/configs_dispatcher.cpp @@ -588,6 +588,10 @@ void TConfigsDispatcher::Handle(TEvConsole::TEvConfigSubscriptionNotification::T bool wasYamlConfigEnabled = YamlConfigEnabled; YamlConfigEnabled = newYamlProtoConfig.HasYamlConfigEnabled() && newYamlProtoConfig.GetYamlConfigEnabled(); yamlConfigTurnedOff = wasYamlConfigEnabled && !YamlConfigEnabled; + } else if (YamlConfig.empty()) { + bool wasYamlConfigEnabled = YamlConfigEnabled; + YamlConfigEnabled = false; + yamlConfigTurnedOff = wasYamlConfigEnabled && !YamlConfigEnabled; } else { newYamlProtoConfig = YamlProtoConfig; } diff --git a/ydb/core/cms/console/configs_dispatcher_ut.cpp b/ydb/core/cms/console/configs_dispatcher_ut.cpp index b04056f4005..311b03f02d8 100644 --- a/ydb/core/cms/console/configs_dispatcher_ut.cpp +++ b/ydb/core/cms/console/configs_dispatcher_ut.cpp @@ -551,6 +551,29 @@ selector_config: [] UNIT_ASSERT_VALUES_EQUAL(expectedConfig.ShortDebugString(), reply->Config.ShortDebugString()); } + Y_UNIT_TEST(DoubleDrop) { + TTenantTestRuntime runtime(DefaultConsoleTestConfig()); + TString yamlConfig = R"( +--- +cluster: "" +version: 1 +--- +config: + log_config: + cluster_name: cluster1 +allowed_labels: + test: + type: enum + values: + ? true + +selector_config: [] +)"; + CheckApplyConfig(runtime, Ydb::StatusIds::SUCCESS, yamlConfig); + CheckDropConfig(runtime, Ydb::StatusIds::SUCCESS, "", 1); + CheckDropConfig(runtime, Ydb::StatusIds::SUCCESS, "", 1); + } + Y_UNIT_TEST(TestYamlEndToEnd) { NKikimrConfig::TAppConfig config; auto *label = config.AddLabels(); @@ -736,6 +759,17 @@ selector_config: UNIT_ASSERT_VALUES_EQUAL(expectedConfig.ShortDebugString(), reply->Config.ShortDebugString()); notifications = 0; + CheckDropConfig(runtime, Ydb::StatusIds::SUCCESS, "", 5); + reply = runtime.GrabEdgeEventRethrow<TEvPrivate::TEvGotNotification>(handle); + expectedConfig = {}; + logConfig = expectedConfig.MutableLogConfig(); + logConfig->SetClusterName("cluster2"); + logConfig->SetDefaultLevel(5); + UNIT_ASSERT(notifications > 0); + UNIT_ASSERT_VALUES_EQUAL(expectedConfig.ShortDebugString(), reply->Config.ShortDebugString()); + + CheckDropConfig(runtime, Ydb::StatusIds::SUCCESS, "", 5); + TString yamlConfig6 = R"( --- cluster: "" @@ -758,9 +792,7 @@ allowed_labels: selector_config: - description: Test selector: - test: - not_in: - - true + test: true config: log_config: !inherit entry: @@ -774,6 +806,9 @@ selector_config: logConfig = expectedConfig.MutableLogConfig(); logConfig->SetClusterName("cluster3"); logConfig->SetDefaultLevel(5); + entry = logConfig->AddEntry(); + entry->SetComponent("AUDIT_LOG_WRITER"); + entry->SetLevel(7); UNIT_ASSERT(notifications > 0); UNIT_ASSERT_VALUES_EQUAL(expectedConfig.ShortDebugString(), reply->Config.ShortDebugString()); notifications = 0; @@ -786,6 +821,48 @@ version: 7 config: log_config: cluster_name: cluster3 + cms_config: + sentinel_config: + enable: true + yaml_config_enabled: true + +allowed_labels: + test: + type: enum + values: + ? true + +selector_config: +- description: Test + selector: + test: + not_in: + - true + config: + log_config: !inherit + entry: + - component: AUDIT_LOG_WRITER + level: 7 +)"; + CheckApplyConfig(runtime, Ydb::StatusIds::SUCCESS, yamlConfig7); + + reply = runtime.GrabEdgeEventRethrow<TEvPrivate::TEvGotNotification>(handle); + expectedConfig = {}; + logConfig = expectedConfig.MutableLogConfig(); + logConfig->SetClusterName("cluster3"); + logConfig->SetDefaultLevel(5); + UNIT_ASSERT(notifications > 0); + UNIT_ASSERT_VALUES_EQUAL(expectedConfig.ShortDebugString(), reply->Config.ShortDebugString()); + notifications = 0; + + TString yamlConfig8 = R"( +--- +cluster: "" +version: 8 +--- +config: + log_config: + cluster_name: cluster3 yaml_config_enabled: true allowed_labels: @@ -801,7 +878,7 @@ selector_config: config: yaml_config_enabled: false )"; - CheckApplyConfig(runtime, Ydb::StatusIds::SUCCESS, yamlConfig7); + CheckApplyConfig(runtime, Ydb::StatusIds::SUCCESS, yamlConfig8); reply = runtime.GrabEdgeEventRethrow<TEvPrivate::TEvGotNotification>(handle); expectedConfig = {}; diff --git a/ydb/core/cms/console/console.h b/ydb/core/cms/console/console.h index 5a8716bba1f..06b67917048 100644 --- a/ydb/core/cms/console/console.h +++ b/ydb/core/cms/console/console.h @@ -51,6 +51,7 @@ struct TEvConsole { EvGetAllConfigsRequest, EvResolveConfigRequest, EvResolveAllConfigRequest, + EvDropConfigRequest, // responses EvCreateTenantResponse = EvCreateTenantRequest + 1024, @@ -88,6 +89,7 @@ struct TEvConsole { EvGetAllConfigsResponse, EvResolveConfigResponse, EvResolveAllConfigResponse, + EvDropConfigResponse, EvEnd }; @@ -155,6 +157,12 @@ struct TEvConsole { using TResponse = TEvApplyConfigResponse; }; + struct TEvDropConfigResponse : public TEventShortDebugPB<TEvDropConfigResponse, NKikimrConsole::TDropConfigResponse, EvDropConfigResponse> {}; + + struct TEvDropConfigRequest : public TEventShortDebugPB<TEvDropConfigRequest, NKikimrConsole::TDropConfigRequest, EvDropConfigRequest> { + using TResponse = TEvDropConfigResponse; + }; + struct TEvAddVolatileConfigResponse : public TEventShortDebugPB<TEvAddVolatileConfigResponse, NKikimrConsole::TAddVolatileConfigResponse, EvAddVolatileConfigResponse> {}; struct TEvAddVolatileConfigRequest : public TEventShortDebugPB<TEvAddVolatileConfigRequest, NKikimrConsole::TAddVolatileConfigRequest, EvAddVolatileConfigRequest> { diff --git a/ydb/core/cms/console/console__apply_yaml_config.cpp b/ydb/core/cms/console/console__apply_yaml_config.cpp index 190305e8b40..cf3370fc71a 100644 --- a/ydb/core/cms/console/console__apply_yaml_config.cpp +++ b/ydb/core/cms/console/console__apply_yaml_config.cpp @@ -24,7 +24,7 @@ public: auto config = req.GetRequest().config(); - if (config != Self->YamlConfig) { + if (config != Self->YamlConfig || Self->YamlDropped) { Modify = true; try { @@ -65,7 +65,8 @@ public: } db.Table<Schema::YamlConfig>().Key(Version) - .Update<Schema::YamlConfig::Config>(config); + .Update<Schema::YamlConfig::Config>(config) + .Update<Schema::YamlConfig::Dropped>(false); /* Later we shift this boundary to support rollback and history */ db.Table<Schema::YamlConfig>().Key(Version - 1) @@ -91,6 +92,7 @@ public: if (!Error && Modify) { Self->YamlVersion = Version; Self->YamlConfig = req.GetRequest().config(); + Self->YamlDropped = false; Self->VolatileYamlConfigs.clear(); diff --git a/ydb/core/cms/console/console__drop_yaml_config.cpp b/ydb/core/cms/console/console__drop_yaml_config.cpp new file mode 100644 index 00000000000..57927e85f71 --- /dev/null +++ b/ydb/core/cms/console/console__drop_yaml_config.cpp @@ -0,0 +1,101 @@ +#include "console_configs_manager.h" +#include "console_configs_provider.h" + +#include <ydb/core/tablet_flat/tablet_flat_executed.h> + +namespace NKikimr::NConsole { + +using namespace NKikimrConsole; + +class TConfigsManager::TTxDropYamlConfig : public TTransactionBase<TConfigsManager> { +public: + TTxDropYamlConfig(TConfigsManager *self, + TEvConsole::TEvDropConfigRequest::TPtr &ev) + : TBase(self) + , Request(std::move(ev)) + { + } + + bool Execute(TTransactionContext &txc, const TActorContext &) override + { + auto &req = Request->Get()->Record; + + NIceDb::TNiceDb db(txc.DB); + + Y_UNUSED(Modify); + Y_UNUSED(Error); + + try { + Version = req.GetRequest().version(); + auto cluster = req.GetRequest().cluster(); + + if (Version == 0) { + ythrow yexception() << "Invalid version"; + } + + if (Self->ClusterName != cluster) { + ythrow yexception() << "ClusterName mismatch"; + } + + if (Version != Self->YamlVersion) { + ythrow yexception() << "Version mismatch"; + } + } catch (const yexception& ex) { + Response = MakeHolder<TEvConsole::TEvDropConfigResponse>(); + auto *op = Response->Record.MutableResponse()->mutable_operation(); + op->set_status(Ydb::StatusIds::BAD_REQUEST); + op->set_ready(true); + auto *issue = op->add_issues(); + issue->set_severity(NYql::TSeverityIds::S_ERROR); + issue->set_message(ex.what()); + Error = true; + return true; + } + + if (!Self->YamlDropped) { + Modify = true; + + db.Table<Schema::YamlConfig>().Key(Version) + .Update<Schema::YamlConfig::Dropped>(true); + } + + Response = MakeHolder<TEvConsole::TEvDropConfigResponse>(); + auto *op = Response->Record.MutableResponse()->mutable_operation(); + op->set_status(Ydb::StatusIds::SUCCESS); + op->set_ready(true); + + return true; + } + + void Complete(const TActorContext &ctx) override + { + LOG_DEBUG(ctx, NKikimrServices::CMS_CONFIGS, "TTxDropYamlConfig Complete"); + + ctx.Send(Request->Sender, Response.Release()); + + if (!Error && Modify) { + Self->YamlDropped = true; + + Self->VolatileYamlConfigs.clear(); + + auto resp = MakeHolder<TConfigsProvider::TEvPrivate::TEvUpdateYamlConfig>(""); + ctx.Send(Self->ConfigsProvider, resp.Release()); + } + + Self->TxProcessor->TxCompleted(this, ctx); + } + +private: + TEvConsole::TEvDropConfigRequest::TPtr Request; + THolder<TEvConsole::TEvDropConfigResponse> Response; + bool Error = false; + bool Modify = false; + ui32 Version; +}; + +ITransaction *TConfigsManager::CreateTxDropYamlConfig(TEvConsole::TEvDropConfigRequest::TPtr &ev) +{ + return new TTxDropYamlConfig(this, ev); +} + +} // namespace NKikimr::NConsole diff --git a/ydb/core/cms/console/console__get_yaml_config.cpp b/ydb/core/cms/console/console__get_yaml_config.cpp index 62800326df1..19de729ea7c 100644 --- a/ydb/core/cms/console/console__get_yaml_config.cpp +++ b/ydb/core/cms/console/console__get_yaml_config.cpp @@ -35,14 +35,17 @@ public: Response->Record.MutableResponse()->set_version(Self->YamlVersion); if (!rowset.EndOfSet()) { - auto config = rowset.template GetValue<Schema::YamlConfig::Config>(); - Response->Record.MutableResponse()->set_config(config); - } - - for (auto &[id, cfg] : Self->VolatileYamlConfigs) { - auto *config = Response->Record.MutableResponse()->add_volatile_configs(); - config->set_id(id); - config->set_config(cfg); + bool dropped = rowset.template GetValue<Schema::YamlConfig::Dropped>(); + if (!dropped) { + auto config = rowset.template GetValue<Schema::YamlConfig::Config>(); + Response->Record.MutableResponse()->set_config(config); + + for (auto &[id, cfg] : Self->VolatileYamlConfigs) { + auto *config = Response->Record.MutableResponse()->add_volatile_configs(); + config->set_id(id); + config->set_config(cfg); + } + } } return true; diff --git a/ydb/core/cms/console/console__scheme.h b/ydb/core/cms/console/console__scheme.h index 78e56fee78f..18208f6d8f6 100644 --- a/ydb/core/cms/console/console__scheme.h +++ b/ydb/core/cms/console/console__scheme.h @@ -154,9 +154,10 @@ struct Schema : NIceDb::Schema { struct YamlConfig : Table<103> { struct Version : Column<1, NScheme::NTypeIds::Uint64> {}; struct Config : Column<2, NScheme::NTypeIds::String> {}; + struct Dropped : Column<3, NScheme::NTypeIds::Bool> {}; using TKey = TableKey<Version>; - using TColumns = TableColumns<Version, Config>; + using TColumns = TableColumns<Version, Config, Dropped>; }; using TTables = SchemaTables<Config, Tenants, TenantPools, TenantUnits, RemovedTenants, diff --git a/ydb/core/cms/console/console_configs_manager.cpp b/ydb/core/cms/console/console_configs_manager.cpp index 38a32ac3069..f9f468aeac8 100644 --- a/ydb/core/cms/console/console_configs_manager.cpp +++ b/ydb/core/cms/console/console_configs_manager.cpp @@ -360,9 +360,9 @@ bool TConfigsManager::DbLoadState(TTransactionContext &txc, } if (!yamlConfigRowset.EndOfSet()) { - auto config = yamlConfigRowset.template GetValue<Schema::YamlConfig::Config>(); YamlVersion = yamlConfigRowset.template GetValue<Schema::YamlConfig::Version>(); - YamlConfig = config; + YamlConfig = yamlConfigRowset.template GetValue<Schema::YamlConfig::Config>(); + YamlDropped = yamlConfigRowset.template GetValue<Schema::YamlConfig::Dropped>(); } while (!configItemRowset.EndOfSet()) { @@ -619,6 +619,11 @@ void TConfigsManager::Handle(TEvConsole::TEvApplyConfigRequest::TPtr &ev, const TxProcessor->ProcessTx(CreateTxApplyYamlConfig(ev), ctx); } +void TConfigsManager::Handle(TEvConsole::TEvDropConfigRequest::TPtr &ev, const TActorContext &ctx) +{ + TxProcessor->ProcessTx(CreateTxDropYamlConfig(ev), ctx); +} + void TConfigsManager::Handle(TEvConsole::TEvGetAllConfigsRequest::TPtr &ev, const TActorContext &ctx) { TxProcessor->ProcessTx(CreateTxGetYamlConfig(ev), ctx); diff --git a/ydb/core/cms/console/console_configs_manager.h b/ydb/core/cms/console/console_configs_manager.h index 09233dfd7ff..476999069a6 100644 --- a/ydb/core/cms/console/console_configs_manager.h +++ b/ydb/core/cms/console/console_configs_manager.h @@ -110,6 +110,7 @@ private: class TTxGetLogTail; class TTxLogCleanup; class TTxApplyYamlConfig; + class TTxDropYamlConfig; class TTxGetYamlConfig; ITransaction *CreateTxAddConfigSubscription(TEvConsole::TEvAddConfigSubscriptionRequest::TPtr &ev); @@ -123,6 +124,7 @@ private: ITransaction *CreateTxGetLogTail(TEvConsole::TEvGetLogTailRequest::TPtr &ev); ITransaction *CreateTxLogCleanup(); ITransaction *CreateTxApplyYamlConfig(TEvConsole::TEvApplyConfigRequest::TPtr &ev); + ITransaction *CreateTxDropYamlConfig(TEvConsole::TEvDropConfigRequest::TPtr &ev); ITransaction *CreateTxGetYamlConfig(TEvConsole::TEvGetAllConfigsRequest::TPtr &ev); void Handle(TEvConsole::TEvAddConfigSubscriptionRequest::TPtr &ev, const TActorContext &ctx); @@ -141,6 +143,7 @@ private: void Handle(TEvConsole::TEvRemoveVolatileConfigRequest::TPtr &ev, const TActorContext &ctx); void Handle(TEvInterconnect::TEvNodesInfo::TPtr &ev, const TActorContext &ctx); void Handle(TEvConsole::TEvApplyConfigRequest::TPtr & ev, const TActorContext & ctx); + void Handle(TEvConsole::TEvDropConfigRequest::TPtr & ev, const TActorContext & ctx); void Handle(TEvPrivate::TEvStateLoaded::TPtr &ev, const TActorContext &ctx); void Handle(TEvPrivate::TEvCleanupSubscriptions::TPtr &ev, const TActorContext &ctx); @@ -184,6 +187,7 @@ private: HFunc(TEvConsole::TEvRemoveVolatileConfigRequest, HandleWithRights); FFunc(TEvConsole::EvGetConfigItemsRequest, ForwardToConfigsProvider); HFuncTraced(TEvConsole::TEvApplyConfigRequest, HandleWithRights); + HFuncTraced(TEvConsole::TEvDropConfigRequest, HandleWithRights); FFunc(TEvConsole::EvGetConfigSubscriptionRequest, ForwardToConfigsProvider); FFunc(TEvConsole::EvGetNodeConfigItemsRequest, ForwardToConfigsProvider); FFunc(TEvConsole::EvGetNodeConfigRequest, ForwardToConfigsProvider); @@ -249,6 +253,7 @@ private: TString ClusterName; ui32 YamlVersion = 0; TString YamlConfig; + bool YamlDropped = false; TMap<ui64, TString> VolatileYamlConfigs; }; diff --git a/ydb/core/cms/console/console_impl.h b/ydb/core/cms/console/console_impl.h index b3759df61d5..f0512175cc2 100644 --- a/ydb/core/cms/console/console_impl.h +++ b/ydb/core/cms/console/console_impl.h @@ -100,6 +100,7 @@ private: FFunc(TEvConsole::EvGetConfigItemsRequest, ForwardToConfigsManager); HFuncTraced(TEvConsole::TEvGetConfigRequest, Handle); FFunc(TEvConsole::EvApplyConfigRequest, ForwardToConfigsManager); + FFunc(TEvConsole::EvDropConfigRequest, ForwardToConfigsManager); FFunc(TEvConsole::EvResolveConfigRequest, ForwardToConfigsManager); FFunc(TEvConsole::EvResolveAllConfigRequest, ForwardToConfigsManager); FFunc(TEvConsole::EvGetConfigSubscriptionRequest, ForwardToConfigsManager); diff --git a/ydb/core/cms/console/ut_helpers.h b/ydb/core/cms/console/ut_helpers.h index 23077863cea..4011d6b435b 100644 --- a/ydb/core/cms/console/ut_helpers.h +++ b/ydb/core/cms/console/ut_helpers.h @@ -306,6 +306,21 @@ inline void CheckApplyConfig(TTenantTestRuntime &runtime, UNIT_ASSERT_VALUES_EQUAL(reply->Record.GetResponse().operation().status(), code); } +inline void CheckDropConfig(TTenantTestRuntime &runtime, + Ydb::StatusIds::StatusCode code, + TString clusterName, + ui64 version) +{ + TAutoPtr<IEventHandle> handle; + auto *event = new TEvConsole::TEvDropConfigRequest; + event->Record.MutableRequest()->set_cluster(clusterName); + event->Record.MutableRequest()->set_version(version); + runtime.SendToConsole(event); + + auto reply = runtime.GrabEdgeEventRethrow<TEvConsole::TEvDropConfigResponse>(handle); + UNIT_ASSERT_VALUES_EQUAL(reply->Record.GetResponse().operation().status(), code); +} + inline void CheckAddVolatileConfig(TTenantTestRuntime &runtime, Ydb::StatusIds::StatusCode code, TString clusterName, diff --git a/ydb/core/cms/console/yaml_config/yaml_config.cpp b/ydb/core/cms/console/yaml_config/yaml_config.cpp index 3ec4d72730d..d700cd9738f 100644 --- a/ydb/core/cms/console/yaml_config/yaml_config.cpp +++ b/ydb/core/cms/console/yaml_config/yaml_config.cpp @@ -631,7 +631,7 @@ void AppendVolatileConfigs(NFyaml::TDocument& config, NFyaml::TDocument& volatil ui64 GetVersion(const TString& config) { auto parser = NFyaml::TParser::Create(config); auto header = parser.NextDocument(); - auto str = header->Root().Map().at("version").Scalar(); + auto str = header ? header->Root().Map().at("version").Scalar() : ""; ui64 version = 0; TryFromString<ui64>(str, version); return version; diff --git a/ydb/core/grpc_services/rpc_console.cpp b/ydb/core/grpc_services/rpc_console.cpp index 3ad19ca48ae..597097204be 100644 --- a/ydb/core/grpc_services/rpc_console.cpp +++ b/ydb/core/grpc_services/rpc_console.cpp @@ -16,6 +16,9 @@ using namespace Ydb; using TEvApplyConfigRequest = TGrpcRequestOperationCall<Console::ApplyConfigRequest, Console::ApplyConfigResponse>; +using TEvDropConfigRequest = TGrpcRequestOperationCall<Console::DropConfigRequest, + Console::DropConfigResponse>; + using TEvAddVolatileConfigRequest = TGrpcRequestOperationCall<Console::AddVolatileConfigRequest, Console::AddVolatileConfigResponse>; @@ -165,6 +168,13 @@ void DoApplyConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvi TEvConsole::TEvApplyConfigResponse>(p.release())); } +void DoDropConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider &) { + TActivationContext::AsActorContext().Register( + new TConsoleRPC<TEvDropConfigRequest, + TEvConsole::TEvDropConfigRequest, + TEvConsole::TEvDropConfigResponse>(p.release())); +} + void DoAddVolatileConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider &) { TActivationContext::AsActorContext().Register( new TConsoleRPC<TEvAddVolatileConfigRequest, diff --git a/ydb/core/grpc_services/service_console.h b/ydb/core/grpc_services/service_console.h index 0db78724a5b..6a47a9443b1 100644 --- a/ydb/core/grpc_services/service_console.h +++ b/ydb/core/grpc_services/service_console.h @@ -10,6 +10,8 @@ class IFacilityProvider; void DoApplyConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&); +void DoDropConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&); + void DoAddVolatileConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&); void DoRemoveVolatileConfigRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&); diff --git a/ydb/core/protos/console_config.proto b/ydb/core/protos/console_config.proto index c6b887ec5a0..e6a53110c5a 100644 --- a/ydb/core/protos/console_config.proto +++ b/ydb/core/protos/console_config.proto @@ -244,6 +244,15 @@ message TApplyConfigResponse { optional Ydb.Console.ApplyConfigResponse Response = 1; } +message TDropConfigRequest { + optional Ydb.Console.DropConfigRequest Request = 1; + optional bytes UserToken = 2; +} + +message TDropConfigResponse { + optional Ydb.Console.DropConfigResponse Response = 1; +} + message TAddVolatileConfigRequest { optional Ydb.Console.AddVolatileConfigRequest Request = 1; optional bytes UserToken = 2; diff --git a/ydb/public/api/grpc/draft/ydb_console_v1.proto b/ydb/public/api/grpc/draft/ydb_console_v1.proto index 81b1be840a4..087ac220800 100644 --- a/ydb/public/api/grpc/draft/ydb_console_v1.proto +++ b/ydb/public/api/grpc/draft/ydb_console_v1.proto @@ -9,6 +9,7 @@ import "ydb/public/api/protos/draft/ydb_console.proto"; service ConsoleService { rpc ApplyConfig(Console.ApplyConfigRequest) returns (Console.ApplyConfigResponse); + rpc DropConfig(Console.DropConfigRequest) returns (Console.DropConfigResponse); rpc AddVolatileConfig(Console.AddVolatileConfigRequest) returns (Console.AddVolatileConfigResponse); rpc RemoveVolatileConfig(Console.RemoveVolatileConfigRequest) returns (Console.RemoveVolatileConfigResponse); rpc GetConfig(Console.GetConfigRequest) returns (Console.GetConfigResponse); diff --git a/ydb/public/api/protos/draft/ydb_console.proto b/ydb/public/api/protos/draft/ydb_console.proto index a81fc180eef..5620801bea0 100644 --- a/ydb/public/api/protos/draft/ydb_console.proto +++ b/ydb/public/api/protos/draft/ydb_console.proto @@ -15,6 +15,16 @@ message ApplyConfigResponse { Ydb.Operations.Operation operation = 1; } +message DropConfigRequest { + Ydb.Operations.OperationParams operation_params = 1; + optional string cluster = 2; + optional uint32 version = 3; +} + +message DropConfigResponse { + Ydb.Operations.Operation operation = 1; +} + message AddVolatileConfigRequest { Ydb.Operations.OperationParams operation_params = 1; optional uint64 id = 2; diff --git a/ydb/public/sdk/cpp/client/draft/ydb_console.cpp b/ydb/public/sdk/cpp/client/draft/ydb_console.cpp index 4985201b6fd..85ef0199ce1 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_console.cpp +++ b/ydb/public/sdk/cpp/client/draft/ydb_console.cpp @@ -22,6 +22,18 @@ public: TRpcRequestSettings::Make(settings)); } + TAsyncStatus DropConfig(const TString& cluster, ui64 version, const TClusterConfigSettings& settings = {}) { + auto request = MakeOperationRequest<Ydb::Console::DropConfigRequest>(settings); + + request.set_cluster(cluster); + request.set_version(version); + + return RunSimple<Ydb::Console::V1::ConsoleService, Ydb::Console::DropConfigRequest, Ydb::Console::DropConfigResponse>( + std::move(request), + &Ydb::Console::V1::ConsoleService::Stub::AsyncDropConfig, + TRpcRequestSettings::Make(settings)); + } + TAsyncStatus AddVolatileConfig(const TString& config, ui64 id, ui64 version, const TString& cluster, const TClusterConfigSettings& settings = {}) { auto request = MakeOperationRequest<Ydb::Console::AddVolatileConfigRequest>(settings); request.set_config(config); @@ -165,6 +177,13 @@ TAsyncStatus TConsoleClient::ApplyConfig( return Impl_->ApplyConfig(config, settings); } +TAsyncStatus TConsoleClient::DropConfig( + const TString& cluster, + ui64 version, + const TClusterConfigSettings& settings) { + return Impl_->DropConfig(cluster, version, settings); +} + TAsyncStatus TConsoleClient::AddVolatileConfig( const TString& config, ui64 id, diff --git a/ydb/public/sdk/cpp/client/draft/ydb_console.h b/ydb/public/sdk/cpp/client/draft/ydb_console.h index d5903c83212..ed704e03305 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_console.h +++ b/ydb/public/sdk/cpp/client/draft/ydb_console.h @@ -87,6 +87,12 @@ public: // Apply config TAsyncStatus ApplyConfig(const TString& config, const TClusterConfigSettings& settings = {}); + // Drop config + TAsyncStatus DropConfig( + const TString& cluster, + ui64 version, + const TClusterConfigSettings& settings = {}); + // Add volatile config TAsyncStatus AddVolatileConfig( const TString& config, diff --git a/ydb/services/console/grpc_service.cpp b/ydb/services/console/grpc_service.cpp index c77c9d745ea..fbc69c8ce54 100644 --- a/ydb/services/console/grpc_service.cpp +++ b/ydb/services/console/grpc_service.cpp @@ -26,6 +26,7 @@ void TGRpcConsoleService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { #NAME, logger, getCounterBlock("console", #NAME))->Run(); ADD_REQUEST(ApplyConfig, DoApplyConfigRequest) + ADD_REQUEST(DropConfig, DoDropConfigRequest) ADD_REQUEST(AddVolatileConfig, DoAddVolatileConfigRequest) ADD_REQUEST(RemoveVolatileConfig, DoRemoveVolatileConfigRequest) ADD_REQUEST(GetConfig, DoGetConfigRequest) |