aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorinnokentii <innokentii@yandex-team.com>2023-04-27 18:10:42 +0300
committerinnokentii <innokentii@yandex-team.com>2023-04-27 18:10:42 +0300
commit9ca91b40d6f45546e20a646d15590c0cc6cc9778 (patch)
treeb08db54e0cc6443ad338afc511310d5bf8e790e2
parent2d433e95d0fe94f64586906a5f30e476488e541a (diff)
downloadydb-9ca91b40d6f45546e20a646d15590c0cc6cc9778.tar.gz
Add drop config
fix Add drop config
-rw-r--r--ydb/core/cms/console/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/cms/console/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/cms/console/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/cms/console/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/cms/console/configs_dispatcher.cpp4
-rw-r--r--ydb/core/cms/console/configs_dispatcher_ut.cpp85
-rw-r--r--ydb/core/cms/console/console.h8
-rw-r--r--ydb/core/cms/console/console__apply_yaml_config.cpp6
-rw-r--r--ydb/core/cms/console/console__drop_yaml_config.cpp101
-rw-r--r--ydb/core/cms/console/console__get_yaml_config.cpp19
-rw-r--r--ydb/core/cms/console/console__scheme.h3
-rw-r--r--ydb/core/cms/console/console_configs_manager.cpp9
-rw-r--r--ydb/core/cms/console/console_configs_manager.h5
-rw-r--r--ydb/core/cms/console/console_impl.h1
-rw-r--r--ydb/core/cms/console/ut_helpers.h15
-rw-r--r--ydb/core/cms/console/yaml_config/yaml_config.cpp2
-rw-r--r--ydb/core/grpc_services/rpc_console.cpp10
-rw-r--r--ydb/core/grpc_services/service_console.h2
-rw-r--r--ydb/core/protos/console_config.proto9
-rw-r--r--ydb/public/api/grpc/draft/ydb_console_v1.proto1
-rw-r--r--ydb/public/api/protos/draft/ydb_console.proto10
-rw-r--r--ydb/public/sdk/cpp/client/draft/ydb_console.cpp19
-rw-r--r--ydb/public/sdk/cpp/client/draft/ydb_console.h6
-rw-r--r--ydb/services/console/grpc_service.cpp1
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)