aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorinnokentii <innokentii@yandex-team.com>2023-10-02 23:07:41 +0300
committerinnokentii <innokentii@yandex-team.com>2023-10-02 23:27:57 +0300
commitb51c527693c038c062e5100480520098306973fc (patch)
treec3e5df577c17c7c5bd9cad288696977bd65a6bbe
parenta5b9f69f1f5e3e91296746829bdda16b1ab3380f (diff)
downloadydb-b51c527693c038c062e5100480520098306973fc.tar.gz
Refactor txs in console
refactor txs in console
-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/console__replace_yaml_config.cpp96
-rw-r--r--ydb/core/cms/console/console__set_yaml_config.cpp122
-rw-r--r--ydb/core/cms/console/console_configs_manager.h1
-rw-r--r--ydb/core/cms/console/ya.make1
8 files changed, 68 insertions, 156 deletions
diff --git a/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt b/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt
index 1e2a1778ea..e49d5fd5ff 100644
--- a/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt
+++ b/ydb/core/cms/console/CMakeLists.darwin-x86_64.txt
@@ -48,7 +48,6 @@ target_sources(core-cms-console PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__add_config_subscription.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__alter_tenant.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__replace_yaml_config.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__set_yaml_config.cpp
${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
diff --git a/ydb/core/cms/console/CMakeLists.linux-aarch64.txt b/ydb/core/cms/console/CMakeLists.linux-aarch64.txt
index a7137b190a..b349c3e86f 100644
--- a/ydb/core/cms/console/CMakeLists.linux-aarch64.txt
+++ b/ydb/core/cms/console/CMakeLists.linux-aarch64.txt
@@ -49,7 +49,6 @@ target_sources(core-cms-console PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__add_config_subscription.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__alter_tenant.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__replace_yaml_config.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__set_yaml_config.cpp
${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
diff --git a/ydb/core/cms/console/CMakeLists.linux-x86_64.txt b/ydb/core/cms/console/CMakeLists.linux-x86_64.txt
index a7137b190a..b349c3e86f 100644
--- a/ydb/core/cms/console/CMakeLists.linux-x86_64.txt
+++ b/ydb/core/cms/console/CMakeLists.linux-x86_64.txt
@@ -49,7 +49,6 @@ target_sources(core-cms-console PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__add_config_subscription.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__alter_tenant.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__replace_yaml_config.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__set_yaml_config.cpp
${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
diff --git a/ydb/core/cms/console/CMakeLists.windows-x86_64.txt b/ydb/core/cms/console/CMakeLists.windows-x86_64.txt
index 1e2a1778ea..e49d5fd5ff 100644
--- a/ydb/core/cms/console/CMakeLists.windows-x86_64.txt
+++ b/ydb/core/cms/console/CMakeLists.windows-x86_64.txt
@@ -48,7 +48,6 @@ target_sources(core-cms-console PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__add_config_subscription.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__alter_tenant.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__replace_yaml_config.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/cms/console/console__set_yaml_config.cpp
${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
diff --git a/ydb/core/cms/console/console__replace_yaml_config.cpp b/ydb/core/cms/console/console__replace_yaml_config.cpp
index a1c2126dcd..96aef52b51 100644
--- a/ydb/core/cms/console/console__replace_yaml_config.cpp
+++ b/ydb/core/cms/console/console__replace_yaml_config.cpp
@@ -8,27 +8,47 @@ namespace NKikimr::NConsole {
using namespace NKikimrConsole;
class TConfigsManager::TTxReplaceYamlConfig : public TTransactionBase<TConfigsManager> {
-public:
+ template <class T>
TTxReplaceYamlConfig(TConfigsManager *self,
- TEvConsole::TEvReplaceYamlConfigRequest::TPtr &ev)
+ T &ev,
+ bool force)
: TBase(self)
- , Request(std::move(ev))
+ , Config(ev->Get()->Record.GetRequest().config())
+ , Sender(ev->Sender)
+ , Force(force)
+ , AllowUnknownFields(ev->Get()->Record.GetRequest().allow_unknown_fields())
+ , DryRun(ev->Get()->Record.GetRequest().dry_run())
{
}
- bool Execute(TTransactionContext &txc, const TActorContext &ctx) override
+public:
+ TTxReplaceYamlConfig(TConfigsManager *self,
+ TEvConsole::TEvReplaceYamlConfigRequest::TPtr &ev)
+ : TTxReplaceYamlConfig(self, ev, false)
{
- auto &req = Request->Get()->Record;
+ }
- NIceDb::TNiceDb db(txc.DB);
+ TTxReplaceYamlConfig(TConfigsManager *self,
+ TEvConsole::TEvSetYamlConfigRequest::TPtr &ev)
+ : TTxReplaceYamlConfig(self, ev, true)
+ {
+ }
- auto config = req.GetRequest().config();
+ bool Execute(TTransactionContext &txc, const TActorContext &ctx) override
+ {
+ NIceDb::TNiceDb db(txc.DB);
try {
- auto metadata = NYamlConfig::GetMetadata(config);
- Cluster = metadata.Cluster.value_or(TString("unknown"));
- Version = metadata.Version.value_or(0);
- UpdatedConfig = NYamlConfig::ReplaceMetadata(config, NYamlConfig::TMetadata{
+ if (!Force) {
+ auto metadata = NYamlConfig::GetMetadata(Config);
+ Cluster = metadata.Cluster.value_or(TString("unknown"));
+ Version = metadata.Version.value_or(0);
+ } else {
+ Cluster = Self->ClusterName;
+ Version = Self->YamlVersion;
+ }
+
+ UpdatedConfig = NYamlConfig::ReplaceMetadata(Config, NYamlConfig::TMetadata{
.Version = Version + 1,
.Cluster = Cluster,
});
@@ -47,15 +67,19 @@ public:
ythrow yexception() << "Version mismatch";
}
- if (req.GetRequest().allow_unknown_fields()) {
+ if (AllowUnknownFields) {
UnknownFieldsCollector = new NYamlConfig::TBasicUnknownFieldsCollector;
}
for (auto& [_, config] : resolved.Configs) {
- auto cfg = NYamlConfig::YamlToProto(config.second, req.GetRequest().allow_unknown_fields(), true, UnknownFieldsCollector);
+ auto cfg = NYamlConfig::YamlToProto(
+ config.second,
+ AllowUnknownFields,
+ true,
+ UnknownFieldsCollector);
}
- if (!req.GetRequest().dry_run()) {
+ if (!DryRun) {
db.Table<Schema::YamlConfig>().Key(Version + 1)
.Update<Schema::YamlConfig::Config>(UpdatedConfig)
// set config dropped by default to support rollback to previous versions
@@ -69,17 +93,26 @@ public:
}
}
- auto ev = MakeHolder<TEvConsole::TEvReplaceYamlConfigResponse>();
-
- if (UnknownFieldsCollector) {
- for (auto& [path, info] : UnknownFieldsCollector->GetUnknownKeys()) {
- auto *issue = ev->Record.AddIssues();
- issue->set_severity(NYql::TSeverityIds::S_WARNING);
- issue->set_message(TStringBuilder{} << "Unknown key# " << info.first << " in proto# " << info.second << " found in path# " << path);
+ auto fillResponse = [&](auto& ev){
+ if (UnknownFieldsCollector) {
+ for (auto& [path, info] : UnknownFieldsCollector->GetUnknownKeys()) {
+ auto *issue = ev->Record.AddIssues();
+ issue->set_severity(NYql::TSeverityIds::S_WARNING);
+ issue->set_message(TStringBuilder{} << "Unknown key# " << info.first << " in proto# " << info.second << " found in path# " << path);
+ }
}
- }
- Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release());
+ Response = MakeHolder<NActors::IEventHandle>(Sender, ctx.SelfID, ev.Release());
+ };
+
+
+ if (!Force) {
+ auto ev = MakeHolder<TEvConsole::TEvReplaceYamlConfigResponse>();
+ fillResponse(ev);
+ } else {
+ auto ev = MakeHolder<TEvConsole::TEvSetYamlConfigResponse>();
+ fillResponse(ev);
+ }
} catch (const yexception& ex) {
Error = true;
@@ -88,7 +121,7 @@ public:
auto *issue = ev->Record.AddIssues();
issue->set_severity(NYql::TSeverityIds::S_ERROR);
issue->set_message(ex.what());
- Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release());
+ Response = MakeHolder<NActors::IEventHandle>(Sender, ctx.SelfID, ev.Release());
}
return true;
@@ -98,11 +131,9 @@ public:
{
LOG_DEBUG(ctx, NKikimrServices::CMS_CONFIGS, "TTxReplaceYamlConfig Complete");
- auto &req = Request->Get()->Record;
-
ctx.Send(Response.Release());
- if (!Error && Modify && !req.GetRequest().dry_run()) {
+ if (!Error && Modify && !DryRun) {
Self->YamlVersion = Version + 1;
Self->YamlConfig = UpdatedConfig;
Self->YamlDropped = false;
@@ -117,7 +148,11 @@ public:
}
private:
- TEvConsole::TEvReplaceYamlConfigRequest::TPtr Request;
+ const TString Config;
+ const TActorId Sender;
+ const bool Force = false;
+ const bool AllowUnknownFields = false;
+ const bool DryRun = false;
THolder<NActors::IEventHandle> Response;
bool Error = false;
bool Modify = false;
@@ -132,4 +167,9 @@ ITransaction *TConfigsManager::CreateTxReplaceYamlConfig(TEvConsole::TEvReplaceY
return new TTxReplaceYamlConfig(this, ev);
}
+ITransaction *TConfigsManager::CreateTxSetYamlConfig(TEvConsole::TEvSetYamlConfigRequest::TPtr &ev)
+{
+ return new TTxReplaceYamlConfig(this, ev);
+}
+
} // namespace NKikimr::NConsole
diff --git a/ydb/core/cms/console/console__set_yaml_config.cpp b/ydb/core/cms/console/console__set_yaml_config.cpp
deleted file mode 100644
index 9a56466458..0000000000
--- a/ydb/core/cms/console/console__set_yaml_config.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#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::TTxSetYamlConfig : public TTransactionBase<TConfigsManager> {
-public:
- TTxSetYamlConfig(TConfigsManager *self,
- TEvConsole::TEvSetYamlConfigRequest::TPtr &ev)
- : TBase(self)
- , Request(std::move(ev))
- {
- }
-
- bool Execute(TTransactionContext &txc, const TActorContext &ctx) override
- {
- auto &req = Request->Get()->Record;
-
- NIceDb::TNiceDb db(txc.DB);
-
- auto config = req.GetRequest().config();
-
- try {
- UpdatedConfig = NYamlConfig::ReplaceMetadata(config, NYamlConfig::TMetadata{
- .Version = Self->YamlVersion + 1,
- .Cluster = Self->ClusterName,
- });
-
- if (UpdatedConfig != Self->YamlConfig || Self->YamlDropped) {
- Modify = true;
-
- auto tree = NFyaml::TDocument::Parse(UpdatedConfig);
- auto resolved = NYamlConfig::ResolveAll(tree);
-
- if (req.GetRequest().allow_unknown_fields()) {
- UnknownFieldsCollector = new NYamlConfig::TBasicUnknownFieldsCollector;
- }
-
- for (auto& [_, config] : resolved.Configs) {
- auto cfg = NYamlConfig::YamlToProto(config.second, req.GetRequest().allow_unknown_fields(), true, UnknownFieldsCollector);
- }
-
- if (!req.GetRequest().dry_run()) {
- db.Table<Schema::YamlConfig>().Key(Self->YamlVersion + 1)
- .Update<Schema::YamlConfig::Config>(UpdatedConfig)
- // set config dropped by default to support rollback to previous versions
- // where new config layout is not supported
- // it will lead to ignoring config from new versions
- .Update<Schema::YamlConfig::Dropped>(true);
-
- /* Later we shift this boundary to support rollback and history */
- db.Table<Schema::YamlConfig>().Key(Self->YamlVersion)
- .Delete();
- }
- }
-
- auto ev = MakeHolder<TEvConsole::TEvSetYamlConfigResponse>();
-
- if (UnknownFieldsCollector) {
- for (auto& [path, info] : UnknownFieldsCollector->GetUnknownKeys()) {
- auto *issue = ev->Record.AddIssues();
- issue->set_severity(NYql::TSeverityIds::S_WARNING);
- issue->set_message(TStringBuilder{} << "Unknown key# " << info.first << " in proto# " << info.second << " found in path# " << path);
- }
- }
-
- Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release());
- } catch (const yexception& ex) {
- Error = true;
-
- auto ev = MakeHolder<TEvConsole::TEvGenericError>();
- ev->Record.SetYdbStatus(Ydb::StatusIds::BAD_REQUEST);
- auto *issue = ev->Record.AddIssues();
- issue->set_severity(NYql::TSeverityIds::S_ERROR);
- issue->set_message(ex.what());
- Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release());
- }
-
- return true;
- }
-
- void Complete(const TActorContext &ctx) override
- {
- LOG_DEBUG(ctx, NKikimrServices::CMS_CONFIGS, "TTxSetYamlConfig Complete");
-
- auto &req = Request->Get()->Record;
-
- ctx.Send(Response.Release());
-
- if (!Error && Modify && !req.GetRequest().dry_run()) {
- Self->YamlVersion = Self->YamlVersion + 1;
- Self->YamlConfig = UpdatedConfig;
- Self->YamlDropped = false;
-
- Self->VolatileYamlConfigs.clear();
-
- auto resp = MakeHolder<TConfigsProvider::TEvPrivate::TEvUpdateYamlConfig>(Self->YamlConfig);
- ctx.Send(Self->ConfigsProvider, resp.Release());
- }
-
- Self->TxProcessor->TxCompleted(this, ctx);
- }
-
-private:
- TEvConsole::TEvSetYamlConfigRequest::TPtr Request;
- THolder<NActors::IEventHandle> Response;
- bool Error = false;
- bool Modify = false;
- TSimpleSharedPtr<NYamlConfig::TBasicUnknownFieldsCollector> UnknownFieldsCollector = nullptr;
- TString UpdatedConfig;
-};
-
-ITransaction *TConfigsManager::CreateTxSetYamlConfig(TEvConsole::TEvSetYamlConfigRequest::TPtr &ev)
-{
- return new TTxSetYamlConfig(this, ev);
-}
-
-} // namespace NKikimr::NConsole
diff --git a/ydb/core/cms/console/console_configs_manager.h b/ydb/core/cms/console/console_configs_manager.h
index 0dcc8c5a05..7bd1ff171c 100644
--- a/ydb/core/cms/console/console_configs_manager.h
+++ b/ydb/core/cms/console/console_configs_manager.h
@@ -110,7 +110,6 @@ private:
class TTxGetLogTail;
class TTxLogCleanup;
class TTxReplaceYamlConfig;
- class TTxSetYamlConfig;
class TTxDropYamlConfig;
class TTxGetYamlConfig;
class TTxGetYamlMetadata;
diff --git a/ydb/core/cms/console/ya.make b/ydb/core/cms/console/ya.make
index 5ce434ac26..4ce399a259 100644
--- a/ydb/core/cms/console/ya.make
+++ b/ydb/core/cms/console/ya.make
@@ -23,7 +23,6 @@ SRCS(
console__add_config_subscription.cpp
console__alter_tenant.cpp
console__replace_yaml_config.cpp
- console__set_yaml_config.cpp
console__cleanup_subscriptions.cpp
console__configure.cpp
console__create_tenant.cpp