diff options
author | innokentii <innokentii@yandex-team.com> | 2023-10-02 23:07:41 +0300 |
---|---|---|
committer | innokentii <innokentii@yandex-team.com> | 2023-10-02 23:27:57 +0300 |
commit | b51c527693c038c062e5100480520098306973fc (patch) | |
tree | c3e5df577c17c7c5bd9cad288696977bd65a6bbe | |
parent | a5b9f69f1f5e3e91296746829bdda16b1ab3380f (diff) | |
download | ydb-b51c527693c038c062e5100480520098306973fc.tar.gz |
Refactor txs in console
refactor txs in console
-rw-r--r-- | ydb/core/cms/console/CMakeLists.darwin-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/cms/console/CMakeLists.linux-aarch64.txt | 1 | ||||
-rw-r--r-- | ydb/core/cms/console/CMakeLists.linux-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/cms/console/CMakeLists.windows-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/cms/console/console__replace_yaml_config.cpp | 96 | ||||
-rw-r--r-- | ydb/core/cms/console/console__set_yaml_config.cpp | 122 | ||||
-rw-r--r-- | ydb/core/cms/console/console_configs_manager.h | 1 | ||||
-rw-r--r-- | ydb/core/cms/console/ya.make | 1 |
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 |