Repository: ydb-platform/ydb
Pull request #18107: Allow fetching extra sections through distconf to revert automatic configuration changes
Author: login: alexvru
Labels: name: not-for-changelog
Created: 2025-05-07T07:55:26Z | Merged: 2025-05-14T14:33:20Z

### Changelog entry <!-- a user-readable short description of the changes that goes to CHANGELOG.md and Release Notes -->

Allow fetching extra sections through distconf to revert automatic configuration changes

### Changelog category <!-- remove all except one -->

* Not for changelog (changelog entry is not required)

### Description for reviewers <!-- (optional) description for those who read this PR -->

This adds option to enrich returned YAML with specific sections for explicit user management, without intervention of distconf/selfheal.



Diff:
diff --git a/ydb/core/blobstorage/nodewarden/distconf_invoke.h b/ydb/core/blobstorage/nodewarden/distconf_invoke.h
index eaaf854a7183..6c8d86a2352d 100644
--- a/ydb/core/blobstorage/nodewarden/distconf_invoke.h
+++ b/ydb/core/blobstorage/nodewarden/distconf_invoke.h
@@ -103,7 +103,7 @@ namespace NKikimr::NStorage {
             OTHER,
         } ControllerOp = EControllerOp::UNSET;
 
-        void FetchStorageConfig(bool manual, bool fetchMain, bool fetchStorage);
+        void FetchStorageConfig(bool fetchMain, bool fetchStorage, bool addExplicitMgmtSections, bool addV1);
         void ReplaceStorageConfig(const TQuery::TReplaceStorageConfig& request);
         void ReplaceStorageConfigResume(const std::optional<TString>& storageConfigYaml, ui64 expectedMainYamlVersion,
                 ui64 expectedStorageYamlVersion, bool enablingDistconf);
diff --git a/ydb/core/blobstorage/nodewarden/distconf_invoke_common.cpp b/ydb/core/blobstorage/nodewarden/distconf_invoke_common.cpp
index 7ed4a5c57fdc..32631a6a78f4 100644
--- a/ydb/core/blobstorage/nodewarden/distconf_invoke_common.cpp
+++ b/ydb/core/blobstorage/nodewarden/distconf_invoke_common.cpp
@@ -115,7 +115,8 @@ namespace NKikimr::NStorage {
 
             case TQuery::kFetchStorageConfig: {
                 const auto& request = record.GetFetchStorageConfig();
-                return FetchStorageConfig(request.GetManual(), request.GetMainConfig(), request.GetStorageConfig());
+                return FetchStorageConfig(request.GetMainConfig(), request.GetStorageConfig(),
+                    request.GetAddExplicitConfigs(), request.GetAddSectionsForMigrationToV1());
             }
 
             case TQuery::kReplaceStorageConfig:
diff --git a/ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp b/ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp
index a2f4dd611b77..e8263bf95b4f 100644
--- a/ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp
+++ b/ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp
@@ -4,18 +4,55 @@
 #include <ydb/core/mind/bscontroller/bsc.h>
 
 #include <ydb/library/yaml_config/yaml_config_parser.h>
+#include <ydb/library/yaml_config/util.h>
 #include <ydb/library/yaml_json/yaml_to_json.h>
+#include <library/cpp/protobuf/json/proto2json.h>
 
 namespace NKikimr::NStorage {
 
     using TInvokeRequestHandlerActor = TDistributedConfigKeeper::TInvokeRequestHandlerActor;
 
-    void TInvokeRequestHandlerActor::FetchStorageConfig(bool manual, bool fetchMain, bool fetchStorage) {
-        if (!Self->StorageConfig) {
-            FinishWithError(TResult::ERROR, "no agreed StorageConfig");
-        } else if (!Self->MainConfigYaml) {
-            FinishWithError(TResult::ERROR, "no stored YAML for storage config");
-        } else {
+    namespace {
+        YAML::Node Json2Yaml(const NJson::TJsonValue& json) {
+            YAML::Node res;
+
+            switch (json.GetType()) {
+                case NJson::JSON_UNDEFINED: return YAML::Node();
+                case NJson::JSON_NULL:      return YAML::Node(YAML::NodeType::Null);
+                case NJson::JSON_BOOLEAN:   return YAML::Node(json.GetBoolean());
+                case NJson::JSON_INTEGER:   return YAML::Node(json.GetInteger());
+                case NJson::JSON_DOUBLE:    return YAML::Node(json.GetDouble());
+                case NJson::JSON_STRING:    return YAML::Node(json.GetString());
+                case NJson::JSON_UINTEGER:  return YAML::Node(json.GetUInteger());
+
+                case NJson::JSON_MAP:
+                    res = YAML::Node(YAML::NodeType::Map);
+                    for (const auto& [key, value] : json.GetMap()) {
+                        res.force_insert(key, Json2Yaml(value));
+                    }
+                    return res;
+
+                case NJson::JSON_ARRAY:
+                    res = YAML::Node(YAML::NodeType::Sequence);
+                    for (const auto& item : json.GetArray()) {
+                        res.push_back(Json2Yaml(item));
+                    }
+                    return res;
+            }
+
+            Y_ABORT();
+        }
+    }
+
+    void TInvokeRequestHandlerActor::FetchStorageConfig(bool fetchMain, bool fetchStorage, bool addExplicitMgmtSections,
+            bool addV1) {
+        try {
+            if (!Self->StorageConfig) {
+                throw yexception() << "no agreed StorageConfig";
+            } else if (!Self->MainConfigYaml) {
+                throw yexception() << "no stored YAML for storage config";
+            }
+
             auto ev = PrepareResult(TResult::OK, std::nullopt);
             auto *record = &ev->Record;
             auto *res = record->MutableFetchStorageConfig();
@@ -26,11 +63,95 @@ namespace NKikimr::NStorage {
                 res->SetStorageYAML(*Self->StorageConfigYaml);
             }
 
-            if (manual) {
-                // add BlobStorageConfig, NameserviceConfig, DomainsConfig into main/storage config
+            if (addExplicitMgmtSections && addV1) {
+                throw yexception() << "can't provide both explicit sections and config suitable for downgrade to v1";
+            } else if (Self->StorageConfigYaml && addV1) {
+                throw yexception() << "can't downgrade to v1 when dedicated storage section is enabled";
+            } else if (addExplicitMgmtSections && Self->StorageConfigYaml && !fetchStorage) {
+                throw yexception() << "can't add explicit sections to storage config as it is not fetched";
+            }
+
+            auto enrich = [&](auto&& protobuf, auto&& callback) {
+                TString *yaml = nullptr;
+
+                if (res->HasStorageYAML()) {
+                    yaml = res->MutableStorageYAML();
+                } else if (res->HasYAML()) {
+                    yaml = res->MutableYAML();
+                } else {
+                    throw yexception() << "can't add explicit sections to main config as it is not fetched";
+                }
+
+                auto doc = NFyaml::TDocument::Parse(*yaml);
+
+                NJson::TJsonValue json;
+                NProtobufJson::Proto2Json(protobuf, json, NYamlConfig::GetProto2JsonConfig());
+                auto inserted = NFyaml::TDocument::Parse(YAML::Dump(Json2Yaml(json)));
+                callback(doc.Root(), inserted.Root().Copy(doc), doc);
+                *yaml = TString(doc.EmitToCharArray().get());
+            };
+
+            auto replace = [&](const char *section) {
+                return [section](auto rootNode, auto protoNode, auto& doc) {
+                    auto m = rootNode.Map().at("config").Map();
+                    if (auto ref = m.pair_at_opt(section)) {
+                        m.Remove(ref);
+                    }
+                    m.Append(doc.CreateScalar(section), protoNode);
+                };
+            };
+
+            if (addExplicitMgmtSections || addV1) { // add BlobStorageConfig (or replace existing one)
+                auto bsConfig = Self->StorageConfig->GetBlobStorageConfig();
+                bsConfig.ClearDefineHostConfig();
+                bsConfig.ClearDefineBox();
+                enrich(bsConfig, replace("blob_storage_config"));
+            }
+            if (addExplicitMgmtSections) {
+                auto callback = [&](const char *name) {
+                    return [name](auto rootNode, auto protoNode, auto& doc) {
+                        auto m = rootNode.Map().at("config").Map();
+                        if (!m.Has("domains_config")) {
+                            m.Append(doc.CreateScalar("domains_config"), doc.CreateMapping());
+                        }
+
+                        m = m["domains_config"].Map();
+                        if (auto ref = m.pair_at_opt(name)) {
+                            m.Remove(ref);
+                        }
+                        m.Append(doc.CreateScalar(name), protoNode);
+                    };
+                };
+                enrich(Self->StorageConfig->GetStateStorageConfig(), callback("explicit_state_storage_config"));
+                enrich(Self->StorageConfig->GetStateStorageBoardConfig(), callback("explicit_state_storage_board_config"));
+                enrich(Self->StorageConfig->GetSchemeBoardConfig(), callback("explicit_scheme_board_config"));
+            }
+            if (addV1) {
+                auto equals = google::protobuf::util::MessageDifferencer::Equals;
+                auto& sc = Self->StorageConfig;
+                auto& ssConfig = sc->GetStateStorageConfig();
+                auto& ssbConfig = sc->GetStateStorageBoardConfig();
+                auto& sbConfig = sc->GetSchemeBoardConfig();
+                if (equals(ssConfig, ssbConfig) && equals(ssConfig, sbConfig)) {
+                    NKikimrConfig::TDomainsConfig domains;
+                    domains.CopyFrom(AppData()->DomainsConfig);
+                    domains.ClearStateStorage();
+                    domains.AddStateStorage()->CopyFrom(ssConfig);
+                    for (int i = 0, count = domains.DomainSize(); i < count; ++i) {
+                        auto *dom = domains.MutableDomain(i);
+                        dom->ClearExplicitCoordinators();
+                        dom->ClearExplicitAllocators();
+                        dom->ClearExplicitMediators();
+                    }
+                    enrich(domains, replace("domains_config"));
+                } else {
+                    throw yexception() << "state storage, state storage board and scheme board configs are not equal";
+                }
             }
 
             Finish(Sender, SelfId(), ev.release(), 0, Cookie);
+        } catch (const yexception& ex) {
+            FinishWithError(TResult::ERROR, ex.what());
         }
     }
 
diff --git a/ydb/core/grpc_services/rpc_config.cpp b/ydb/core/grpc_services/rpc_config.cpp
index 17d22f1fd1ae..09c154d70dae 100644
--- a/ydb/core/grpc_services/rpc_config.cpp
+++ b/ydb/core/grpc_services/rpc_config.cpp
@@ -381,7 +381,23 @@ class TFetchStorageConfigRequest : public TBSConfigRequestGrpc<TFetchStorageConf
             issues.AddIssue("Only fetch mode \"all\" is supported now.");
             return false;
         }
-        return true;
+        switch (const auto& all = request.all(); all.config_transform_case()) {
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::CONFIG_TRANSFORM_NOT_SET:
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kNone:
+                return true;
+
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kAddBlobStorageAndDomainsConfig:
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kAddExplicitSections:
+                RequireSelfManagement = true;
+                return true;
+
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kDetachStorageConfigSection:
+            case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kAttachStorageConfigSection:
+                break; // we don't support them
+        }
+        status = Ydb::StatusIds::BAD_REQUEST;
+        issues.AddIssue("Unsupported config_transform specified.");
+        return false;
     }
 
     NACLib::EAccessRights GetRequiredAccessRights() const {
@@ -409,6 +425,18 @@ class TFetchStorageConfigRequest : public TBSConfigRequestGrpc<TFetchStorageConf
             case Ydb::Config::FetchConfigRequest::ModeCase::kAll:
                 record->SetMainConfig(true);
                 record->SetStorageConfig(true);
+                switch (const auto& all = request.all(); all.config_transform_case()) {
+                    case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kAddBlobStorageAndDomainsConfig:
+                        record->SetAddSectionsForMigrationToV1(true);
+                        break;
+
+                    case Ydb::Config::FetchConfigRequest::FetchModeAll::ConfigTransformCase::kAddExplicitSections:
+                        record->SetAddExplicitConfigs(true);
+                        break;
+
+                    default:
+                        break;
+                }
                 break;
 
             case Ydb::Config::FetchConfigRequest::ModeCase::kTarget:
diff --git a/ydb/core/grpc_services/rpc_config_base.h b/ydb/core/grpc_services/rpc_config_base.h
index b72e83a2445c..abd6a5c5af9a 100644
--- a/ydb/core/grpc_services/rpc_config_base.h
+++ b/ydb/core/grpc_services/rpc_config_base.h
@@ -187,6 +187,9 @@ class TBSConfigRequestGrpc : public TRpcOperationRequestActor<TDerived, TRequest
             auto ev = std::make_unique<NStorage::TEvNodeConfigInvokeOnRoot>();
             self->FillDistconfQuery(*ev);
             self->Send(MakeBlobStorageNodeWardenID(self->SelfId().NodeId()), ev.release());
+        } else if (RequireSelfManagement) {
+            self->Reply(Ydb::StatusIds::BAD_REQUEST, "operating self-management is required to fulfill this request",
+                NKikimrIssues::TIssuesIds::DEFAULT_ERROR, self->ActorContext());
         } else { // classic BSC
             CreatePipe();
         }
@@ -409,6 +412,9 @@ class TBSConfigRequestGrpc : public TRpcOperationRequestActor<TDerived, TRequest
     EState State = EState::UNKNOWN;
     TActorId BSCPipeClient;
     ui32 InterfaceVersion = 0;
+
+protected:
+    bool RequireSelfManagement = false;
 };
 
 } // namespace NKikimr::NGRpcService
diff --git a/ydb/core/protos/blobstorage_distributed_config.proto b/ydb/core/protos/blobstorage_distributed_config.proto
index 2eed8f6e7e7b..e40ee6a00b8b 100644
--- a/ydb/core/protos/blobstorage_distributed_config.proto
+++ b/ydb/core/protos/blobstorage_distributed_config.proto
@@ -193,9 +193,11 @@ message TEvNodeConfigInvokeOnRoot {
     {}
 
     message TFetchStorageConfig {
-        bool Manual = 1; // when set to true, distconf returns conventional configuration
+        reserved 1;
         bool MainConfig = 2;
         bool StorageConfig = 3;
+        bool AddSectionsForMigrationToV1 = 5; // add sections so this config becomes suitable for migration to v1
+        bool AddExplicitConfigs = 4; // add explicit settings for all managed entities
     }
 
     message TReplaceStorageConfig {
diff --git a/ydb/library/fyamlcpp/fyamlcpp.cpp b/ydb/library/fyamlcpp/fyamlcpp.cpp
index 3fcf6d517474..696c5b11ae3f 100644
--- a/ydb/library/fyamlcpp/fyamlcpp.cpp
+++ b/ydb/library/fyamlcpp/fyamlcpp.cpp
@@ -643,6 +643,21 @@ TNodeRef TDocument::Buildf(const char* content) {
     return TNodeRef(fy_node_build_from_string(Document_.get(), content, strlen(content)));
 }
 
+TNodeRef TDocument::CreateScalar(const TString& content) {
+    ENSURE_DOCUMENT_NOT_EMPTY(Document_);
+    return TNodeRef(fy_node_create_scalar_copy(Document_.get(), content.data(), content.size()));
+}
+
+TNodeRef TDocument::CreateMapping() {
+    ENSURE_DOCUMENT_NOT_EMPTY(Document_);
+    return TNodeRef(fy_node_create_mapping(Document_.get()));
+}
+
+TNodeRef TDocument::CreateSequence() {
+    ENSURE_DOCUMENT_NOT_EMPTY(Document_);
+    return TNodeRef(fy_node_create_sequence(Document_.get()));
+}
+
 void TDocument::Resolve() {
     ENSURE_DOCUMENT_NOT_EMPTY(Document_);
     if (fy_document_resolve(Document_.get()) != 0) {
diff --git a/ydb/library/fyamlcpp/fyamlcpp.h b/ydb/library/fyamlcpp/fyamlcpp.h
index 3f119e57442b..32acfc5889e2 100644
--- a/ydb/library/fyamlcpp/fyamlcpp.h
+++ b/ydb/library/fyamlcpp/fyamlcpp.h
@@ -706,6 +706,10 @@ class TDocument {
 
     TNodeRef Buildf(const char* content);
 
+    TNodeRef CreateScalar(const TString& content);
+    TNodeRef CreateMapping();
+    TNodeRef CreateSequence();
+
     void Resolve();
 
     bool HasDirectives();
diff --git a/ydb/public/api/protos/ydb_config.proto b/ydb/public/api/protos/ydb_config.proto
index 3bef77fda109..bffb681c2f6a 100644
--- a/ydb/public/api/protos/ydb_config.proto
+++ b/ydb/public/api/protos/ydb_config.proto
@@ -114,7 +114,8 @@ message FetchConfigRequest {
     message FetchModeAll {
         // Use this option to somehow transform main config
         // Currently used to automatically derive detached StorageSection from MainConfig
-        //     or vice versa
+        //     or vice versa, and to add some internally-managed sections into config for
+        //     explicit user control
         oneof config_transform {
             // Optionally may be set to explicitly tell "do not transform anything"
             google.protobuf.Empty none = 1;
@@ -130,6 +131,13 @@ message FetchConfigRequest {
             // (MainConfig*, StorageConfig) -> (MainConfig)
             // MainConfig with asterisk means MainConfig with excluded storage-related sections
             google.protobuf.Empty attach_storage_config_section = 3;
+
+            // Fetch will return MainConfig with added blob_storage_config and domains_config sections in order to
+            //    downgrade to configuration v1.
+            google.protobuf.Empty add_blob_storage_and_domains_config = 4;
+
+            // Fetch will return MainConfig/StorageConfig with added blob_storage_config and explicit_* sections
+            google.protobuf.Empty add_explicit_sections = 5;
         }
     }
 
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.cpp b/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.cpp
index f81dfa70ef39..6eafd7c4d99d 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.cpp
+++ b/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.cpp
@@ -92,6 +92,10 @@ void TCommandConfigFetch::Config(TConfig& config) {
         .StoreTrue(&DedicatedStorageSection);
     config.Opts->AddLongOption("dedicated-cluster-section", "Fetch dedicated cluster section")
         .StoreTrue(&DedicatedClusterSection);
+    config.Opts->AddLongOption("v2-internal-state", "Fetch all managed internal sections in v1 format (in order to downgrade)")
+        .StoreTrue(&FetchInternalState);
+    config.Opts->AddLongOption("v2-explicit-sections", "Add explicit sections to control managed entities manually")
+        .StoreTrue(&FetchExplicitSections);
     config.SetFreeArgsNum(0);
 
     config.AllowEmptyDatabase = AllowEmptyDatabase;
@@ -100,6 +104,12 @@ void TCommandConfigFetch::Config(TConfig& config) {
 
 void TCommandConfigFetch::Parse(TConfig& config) {
     TClientCommand::Parse(config);
+
+    if (FetchInternalState && FetchExplicitSections) {
+        ythrow yexception() << "Can't specify both --v2-internal-state and --v2-explicit-sections at the same time.";
+    } else if (UseLegacyApi && (FetchInternalState || FetchExplicitSections)) {
+        ythrow yexception() << "--v2-internal-state and --v2-explicit-sections can't be used with legacy API.";
+    }
 }
 
 int TCommandConfigFetch::Run(TConfig& config) {
@@ -116,12 +126,23 @@ int TCommandConfigFetch::Run(TConfig& config) {
 
     if (!UseLegacyApi) {
         NYdb::NConfig::TFetchAllConfigsSettings settings;
+        if (FetchInternalState) {
+            settings.Transform(NConfig::EFetchAllConfigsTransform::ADD_BLOB_STORAGE_AND_DOMAINS_CONFIG);
+        } else if (FetchExplicitSections) {
+            settings.Transform(NConfig::EFetchAllConfigsTransform::ADD_EXPLICIT_SECTIONS);
+        }
         result = client.FetchAllConfigs(settings).GetValueSync();
     }
 
     // if the new Config API is not supported, fallback to the old DynamicConfig API
     if (result.GetStatus() == EStatus::CLIENT_CALL_UNIMPLEMENTED || result.GetStatus() == EStatus::UNSUPPORTED) {
         Cerr << "Warning: Fallback to DynamicConfig API" << Endl;
+
+        if (FetchInternalState || FetchExplicitSections) {
+            Cerr << "Error: --v2-internal-state and --v2-explicit-sections can't be used with legacy API." << Endl;
+            return EXIT_FAILURE;
+        }
+
         auto client = NYdb::NDynamicConfig::TDynamicConfigClient(*driver);
         auto result = client.GetConfig().GetValueSync();
         NStatusHelpers::ThrowOnErrorOrPrintIssues(result);
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.h b/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.h
index fbdff178d7bd..85087db1447f 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.h
+++ b/ydb/public/lib/ydb_cli/commands/ydb_dynamic_config.h
@@ -64,6 +64,8 @@ class TCommandConfigFetch : public TYdbReadOnlyCommand {
     bool AllowEmptyDatabase = false;
     bool DedicatedStorageSection = false;
     bool DedicatedClusterSection = false;
+    bool FetchInternalState = false;
+    bool FetchExplicitSections = false;
 };
 
 class TCommandConfigResolve : public TYdbReadOnlyCommand {
diff --git a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/config/config.h b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/config/config.h
index f88121add9e2..dff0423a6d9f 100644
--- a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/config/config.h
+++ b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/config/config.h
@@ -21,10 +21,12 @@ enum class EFetchAllConfigsTransform {
     NONE,
     DETACH_STORAGE_CONFIG_SECTION,
     ATTACH_STORAGE_CONFIG_SECTION,
+    ADD_BLOB_STORAGE_AND_DOMAINS_CONFIG,
+    ADD_EXPLICIT_SECTIONS,
 };
 
 struct TFetchAllConfigsSettings : public NYdb::TOperationRequestSettings<TFetchAllConfigsSettings> {
-    FLUENT_SETTING(EFetchAllConfigsTransform, Transform);
+    FLUENT_SETTING_DEFAULT(EFetchAllConfigsTransform, Transform, EFetchAllConfigsTransform::NONE);
 };
 
 struct TBootstrapClusterSettings : public NYdb::TOperationRequestSettings<TBootstrapClusterSettings> {};
diff --git a/ydb/public/sdk/cpp/src/client/config/config.cpp b/ydb/public/sdk/cpp/src/client/config/config.cpp
index 8b329cfbb986..301bcebb4651 100644
--- a/ydb/public/sdk/cpp/src/client/config/config.cpp
+++ b/ydb/public/sdk/cpp/src/client/config/config.cpp
@@ -68,7 +68,28 @@ class TConfigClient::TImpl : public TClientImplCommon<TConfigClient::TImpl> {
 
     TAsyncFetchConfigResult FetchAllConfigs(const TFetchAllConfigsSettings& settings = {}) {
         auto request = MakeOperationRequest<Ydb::Config::FetchConfigRequest>(settings);
-        request.mutable_all();
+        auto *all = request.mutable_all();
+        switch (settings.Transform_) {
+            case EFetchAllConfigsTransform::NONE:
+                all->mutable_none();
+                break;
+
+            case EFetchAllConfigsTransform::DETACH_STORAGE_CONFIG_SECTION:
+                all->mutable_detach_storage_config_section();
+                break;
+
+            case EFetchAllConfigsTransform::ATTACH_STORAGE_CONFIG_SECTION:
+                all->mutable_attach_storage_config_section();
+                break;
+
+            case EFetchAllConfigsTransform::ADD_BLOB_STORAGE_AND_DOMAINS_CONFIG:
+                all->mutable_add_blob_storage_and_domains_config();
+                break;
+
+            case EFetchAllConfigsTransform::ADD_EXPLICIT_SECTIONS:
+                all->mutable_add_explicit_sections();
+                break;
+        }
 
         auto promise = NThreading::NewPromise<TFetchConfigResult>();
 


Reviews:
user: login: Enjection
body: Looks good in general. Main concern is usage of two yaml libraries. Not a blocker but would be great to have some tests on it.
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-05-12T20:36:27Z
user: login: alexvru
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-13T10:21:50Z
user: login: Gazizonoki
body: SDK - ok
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-14T12:48:10Z
user: login: pnv1
body: CLI part OK
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-14T14:29:53Z

Review comments:
diff_hunk: @@ -103,7 +103,7 @@ namespace NKikimr::NStorage {
             OTHER,
         } ControllerOp = EControllerOp::UNSET;
 
-        void FetchStorageConfig(bool manual, bool fetchMain, bool fetchStorage);
+        void FetchStorageConfig(bool fetchMain, bool fetchStorage, bool addExplicit, bool addV1);
path: ydb/core/blobstorage/nodewarden/distconf_invoke.h
user: login: Enjection
body: addExplicit sounds confusing
created_at: 2025-05-12T20:30:39Z
author_association: MEMBER
diff_hunk: @@ -5,17 +5,65 @@
 
 #include <ydb/library/yaml_config/yaml_config_parser.h>
 #include <ydb/library/yaml_json/yaml_to_json.h>
+#include <library/cpp/protobuf/json/proto2json.h>
 
 namespace NKikimr::NStorage {
 
     using TInvokeRequestHandlerActor = TDistributedConfigKeeper::TInvokeRequestHandlerActor;
 
-    void TInvokeRequestHandlerActor::FetchStorageConfig(bool manual, bool fetchMain, bool fetchStorage) {
-        if (!Self->StorageConfig) {
-            FinishWithError(TResult::ERROR, "no agreed StorageConfig");
-        } else if (!Self->MainConfigYaml) {
-            FinishWithError(TResult::ERROR, "no stored YAML for storage config");
-        } else {
+    namespace {
+        YAML::Node Json2Yaml(const NJson::TJsonValue& json) {
+            YAML::Node res;
+
+            switch (json.GetType()) {
+                case NJson::JSON_UNDEFINED:
+                    return res;
+
+                case NJson::JSON_NULL:
+                    return YAML::Node(YAML::NodeType::Null);
+
+                case NJson::JSON_BOOLEAN:
+                    return YAML::Node(json.GetBoolean());
+
+                case NJson::JSON_INTEGER:
+                    return YAML::Node(json.GetInteger());
+
+                case NJson::JSON_DOUBLE:
+                    return YAML::Node(json.GetDouble());
+
+                case NJson::JSON_STRING:
+                    return YAML::Node(json.GetString());
+
+                case NJson::JSON_MAP:
+                    res = YAML::Node(YAML::NodeType::Map);
+                    for (const auto& [key, value] : json.GetMap()) {
+                        res.force_insert(key, Json2Yaml(value));
+                    }
+                    return res;
+
+                case NJson::JSON_ARRAY:
+                    res = YAML::Node(YAML::NodeType::Sequence);
+                    for (const auto& item : json.GetArray()) {
+                        res.push_back(Json2Yaml(item));
+                    }
+                    return res;
+
+                case NJson::JSON_UINTEGER:
+                    return YAML::Node(json.GetUInteger());
+            }
+
+            Y_ABORT();
+        }
+    }
+
+    void TInvokeRequestHandlerActor::FetchStorageConfig(bool fetchMain, bool fetchStorage, bool addExplicit, bool addV1) {
+        try {
+            if (!Self->StorageConfig) {
+                throw yexception() << "no agreed StorageConfig";
+            } else if (!Self->MainConfigYaml) {
+                throw yexception() << "no stored YAML for storage config";
+            }
+
path: ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp
user: login: Enjection
body: Using this json library may lead to potential loss of tags e.g. `!inherit` it's better to replace it with libfyamlcpp or at least provide some tests, that tags are preserved.
created_at: 2025-05-12T20:33:31Z
author_association: MEMBER
diff_hunk: @@ -5,17 +5,65 @@
 
 #include <ydb/library/yaml_config/yaml_config_parser.h>
 #include <ydb/library/yaml_json/yaml_to_json.h>
+#include <library/cpp/protobuf/json/proto2json.h>
 
 namespace NKikimr::NStorage {
 
     using TInvokeRequestHandlerActor = TDistributedConfigKeeper::TInvokeRequestHandlerActor;
 
-    void TInvokeRequestHandlerActor::FetchStorageConfig(bool manual, bool fetchMain, bool fetchStorage) {
-        if (!Self->StorageConfig) {
-            FinishWithError(TResult::ERROR, "no agreed StorageConfig");
-        } else if (!Self->MainConfigYaml) {
-            FinishWithError(TResult::ERROR, "no stored YAML for storage config");
-        } else {
+    namespace {
+        YAML::Node Json2Yaml(const NJson::TJsonValue& json) {
+            YAML::Node res;
+
+            switch (json.GetType()) {
+                case NJson::JSON_UNDEFINED:
+                    return res;
+
+                case NJson::JSON_NULL:
+                    return YAML::Node(YAML::NodeType::Null);
+
+                case NJson::JSON_BOOLEAN:
+                    return YAML::Node(json.GetBoolean());
+
+                case NJson::JSON_INTEGER:
+                    return YAML::Node(json.GetInteger());
+
+                case NJson::JSON_DOUBLE:
+                    return YAML::Node(json.GetDouble());
+
+                case NJson::JSON_STRING:
+                    return YAML::Node(json.GetString());
+
+                case NJson::JSON_MAP:
+                    res = YAML::Node(YAML::NodeType::Map);
+                    for (const auto& [key, value] : json.GetMap()) {
+                        res.force_insert(key, Json2Yaml(value));
+                    }
+                    return res;
+
+                case NJson::JSON_ARRAY:
+                    res = YAML::Node(YAML::NodeType::Sequence);
+                    for (const auto& item : json.GetArray()) {
+                        res.push_back(Json2Yaml(item));
+                    }
+                    return res;
+
+                case NJson::JSON_UINTEGER:
+                    return YAML::Node(json.GetUInteger());
+            }
+
+            Y_ABORT();
+        }
+    }
+
+    void TInvokeRequestHandlerActor::FetchStorageConfig(bool fetchMain, bool fetchStorage, bool addExplicit, bool addV1) {
+        try {
+            if (!Self->StorageConfig) {
+                throw yexception() << "no agreed StorageConfig";
+            } else if (!Self->MainConfigYaml) {
+                throw yexception() << "no stored YAML for storage config";
+            }
+
path: ydb/core/blobstorage/nodewarden/distconf_invoke_storage_config.cpp
user: login: alexvru
body: Can't agree :) This is used only for conversion from protobuf to YAML, it does not require, not produce any tags. It is used to create completely new sections.
created_at: 2025-05-13T10:21:50Z
author_association: COLLABORATOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-07T07:57:12Z
body: <!-- status pr=18107, validate PR description status -->
:green_circle: `2025-05-07 07:57:11 UTC` The validation of the Pull Request description is successful.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T07:59:21Z
body: <!-- status pr=18107, preset=release-asan, run=42359 -->
:white_circle: `2025-05-07 07:59:21 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14878149096/job/41779636262) **linux-x86_64-release-asan** for 35710beb1e2e3521e8cc986e786f5078be1d3ac3 has started.
:white_circle: `2025-05-07 07:59:32 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14878149096/ya-x86-64-asan/index.html)
:white_circle: `2025-05-07 08:02:46 UTC` ya make is running...
:black_circle: `2025-05-07 09:17:44 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T08:04:25Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42359 -->
:white_circle: `2025-05-07 08:04:24 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14878149096/job/41779636261) **linux-x86_64-relwithdebinfo** for 35710beb1e2e3521e8cc986e786f5078be1d3ac3 has started.
:white_circle: `2025-05-07 08:04:36 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14878149096/ya-x86-64/index.html)
:white_circle: `2025-05-07 08:07:52 UTC` ya make is running...
:black_circle: `2025-05-07 09:17:46 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T09:23:32Z
body: <!-- status pr=18107, preset=release-asan, run=42376 -->
:white_circle: `2025-05-07 09:23:31 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14879740682/job/41784861650) **linux-x86_64-release-asan** for fbb7b361a48702ed7cd238a4e6a40d1a26216b0e has started.
:white_circle: `2025-05-07 09:23:42 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/index.html)
:white_circle: `2025-05-07 09:26:56 UTC` ya make is running...
:yellow_circle: `2025-05-07 10:58:41 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156222) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [15491](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/ya-test.html) | [15349](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [74](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [42](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 11:00:01 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-07 11:37:07 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156293) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1454 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/ya-test.html) | [1341](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [57](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [31](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [25](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 11:37:26 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-05-07 12:07:51 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet

[Test history](https://nebius.testmo.net/automation/runs/view/156331) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1253 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/ya-test.html) | [1144](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [49](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [34](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-07 12:08:06 UTC` Build successful.
:yellow_circle: `2025-05-07 12:08:40 UTC` ydbd size **3.8 GiB** changed* by **+110.7 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da |merge: fbb7b361a48702ed7cd238a4e6a40d1a26216b0e |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 126 470 648** Bytes |**4 126 583 992** Bytes|**+110.7 KiB**|**+0.003%**|
|ydbd stripped size|**1 432 983 000** Bytes|**1 433 024 920** Bytes|**+40.9 KiB**|**+0.003%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da..fbb7b361a48702ed7cd238a4e6a40d1a26216b0e)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T09:27:46Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42376 -->
:white_circle: `2025-05-07 09:27:45 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14879740682/job/41784861693) **linux-x86_64-relwithdebinfo** for fbb7b361a48702ed7cd238a4e6a40d1a26216b0e has started.
:white_circle: `2025-05-07 09:28:35 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/index.html)
:white_circle: `2025-05-07 09:32:33 UTC` ya make is running...
:yellow_circle: `2025-05-07 11:01:44 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156225) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [30333](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/ya-test.html) | [27657](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/ya-test.html#FAIL) | [2631](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/ya-test.html#SKIP) | [41](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 11:04:29 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-07 11:17:25 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156300) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [161 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/ya-test.html) | [127](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/ya-test.html#PASS) | 0 | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/ya-test.html#FAIL) | 0 | [32](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 11:17:34 UTC` ya make is running... (failed tests rerun, try 3)
:green_circle: `2025-05-07 11:29:50 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/156312) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [143 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_3/ya-test.html) | [108](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_3/ya-test.html#PASS) | 0 | 0 | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_3/ya-test.html#SKIP) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14879740682/ya-x86-64/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-07 11:29:57 UTC` Build successful.
:green_circle: `2025-05-07 11:30:22 UTC` ydbd size **2.2 GiB** changed* by **+71.6 KiB**, which is < 100.0 KiB vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da |merge: fbb7b361a48702ed7cd238a4e6a40d1a26216b0e |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 343 701 888** Bytes |**2 343 775 256** Bytes|**+71.6 KiB**|**+0.003%**|
|ydbd stripped size|**493 033 920** Bytes|**493 053 536** Bytes|**+19.2 KiB**|**+0.004%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da..fbb7b361a48702ed7cd238a4e6a40d1a26216b0e)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T13:12:13Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42442 -->
:white_circle: `2025-05-07 13:12:12 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14883637260/job/41799413438) **linux-x86_64-relwithdebinfo** for 056e970f8462213552f1024e20a2baebfc932278 has started.
:white_circle: `2025-05-07 13:12:17 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/index.html)
:white_circle: `2025-05-07 13:15:34 UTC` ya make is running...
:yellow_circle: `2025-05-07 15:18:50 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156408) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [30376](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/ya-test.html) | [27688](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [6](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/ya-test.html#FAIL) | [2639](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/ya-test.html#SKIP) | [43](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 15:21:32 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-05-07 15:49:19 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/156511) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [183 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_2/ya-test.html) | [142](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | [8](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_2/ya-test.html#SKIP) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-05-07 15:49:26 UTC` Build successful.
:red_circle: `2025-05-07 15:49:48 UTC` ydbd size **2.2 GiB** changed* by **+2.6 MiB**, which is >= 2.0 MiB vs main: **Alert**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da |merge: 056e970f8462213552f1024e20a2baebfc932278 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 343 701 888** Bytes |**2 346 382 944** Bytes|**+2.6 MiB**|**+0.114%**|
|ydbd stripped size|**493 033 920** Bytes|**493 391 408** Bytes|**+349.1 KiB**|**+0.073%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/017f2e19bdfbd65969dea8b3a3cfdb46bd4c59da..056e970f8462213552f1024e20a2baebfc932278)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-07T13:15:14Z
body: <!-- status pr=18107, preset=release-asan, run=42442 -->
:white_circle: `2025-05-07 13:15:14 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14883637260/job/41799413432) **linux-x86_64-release-asan** for 056e970f8462213552f1024e20a2baebfc932278 has started.
:white_circle: `2025-05-07 13:15:25 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/index.html)
:white_circle: `2025-05-07 13:18:33 UTC` ya make is running...
:yellow_circle: `2025-05-07 15:22:18 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156412) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [15352](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/ya-test.html) | [15190](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [94](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [42](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 15:23:42 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-07 15:54:27 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/156514) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1274 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/ya-test.html) | [1153](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [60](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [36](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [25](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-07 15:54:41 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-05-07 16:28:02 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet

[Test history](https://nebius.testmo.net/automation/runs/view/156538) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1225 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/ya-test.html) | [1121](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [57](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [23](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [24](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14883637260/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-07 16:28:16 UTC` Build successful.
:yellow_circle: `2025-05-07 16:28:47 UTC` ydbd size **3.8 GiB** changed* by **+124.9 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 7fd0265702374bb707370aa1397bfb2203ee9977 |merge: 056e970f8462213552f1024e20a2baebfc932278 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 126 396 888** Bytes |**4 126 524 824** Bytes|**+124.9 KiB**|**+0.003%**|
|ydbd stripped size|**1 432 968 792** Bytes|**1 432 780 928** Bytes|**-183.5 KiB**|**-0.013%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/7fd0265702374bb707370aa1397bfb2203ee9977..056e970f8462213552f1024e20a2baebfc932278)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-13T10:37:40Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42746 -->
:white_circle: `2025-05-13 10:37:40 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14994469002/job/42125308849) **linux-x86_64-relwithdebinfo** for 72171ead8c323b8419fce76a74ca101da72f75a5 has started.
:white_circle: `2025-05-13 10:37:51 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/index.html)
:white_circle: `2025-05-13 10:41:14 UTC` ya make is running...
:yellow_circle: `2025-05-13 12:36:48 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159094) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [30388](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/ya-test.html) | [27693](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/ya-test.html#FAIL) | [2646](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/ya-test.html#SKIP) | [45](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-13 12:39:25 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-13 13:05:26 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159175) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [640 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/ya-test.html) | [597](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/ya-test.html#PASS) | 0 | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/ya-test.html#FAIL) | [8](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/ya-test.html#SKIP) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-13 13:05:37 UTC` ya make is running... (failed tests rerun, try 3)
:red_circle: `2025-05-13 13:27:35 UTC` Some tests failed, follow the links below.

[Test history](https://nebius.testmo.net/automation/runs/view/159204) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [129 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/ya-test.html) | [96](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/ya-test.html#PASS) | 0 | [1](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/ya-test.html#FAIL) | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/ya-test.html#SKIP) | [30](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-13 13:27:42 UTC` Build successful.
:yellow_circle: `2025-05-13 13:28:04 UTC` ydbd size **2.2 GiB** changed* by **+113.8 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: f91acf568fafeb57e1983ad86e6ca1eb8676355c |merge: 72171ead8c323b8419fce76a74ca101da72f75a5 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 351 863 296** Bytes |**2 351 979 776** Bytes|**+113.8 KiB**|**+0.005%**|
|ydbd stripped size|**494 229 328** Bytes|**494 250 736** Bytes|**+20.9 KiB**|**+0.004%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/f91acf568fafeb57e1983ad86e6ca1eb8676355c..72171ead8c323b8419fce76a74ca101da72f75a5)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-13T10:37:43Z
body: <!-- status pr=18107, preset=release-asan, run=42746 -->
:white_circle: `2025-05-13 10:37:43 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14994469002/job/42125308839) **linux-x86_64-release-asan** for 72171ead8c323b8419fce76a74ca101da72f75a5 has started.
:white_circle: `2025-05-13 10:37:54 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/index.html)
:white_circle: `2025-05-13 10:41:18 UTC` ya make is running...
:yellow_circle: `2025-05-13 12:59:55 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159095) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [15362](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/ya-test.html) | [15078](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [216](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [40](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [28](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-13 13:01:19 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-13 13:38:16 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159197) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [2062 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/ya-test.html) | [1914](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [88](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [34](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-13 13:38:37 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-05-13 14:13:10 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet

[Test history](https://nebius.testmo.net/automation/runs/view/159229) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1499 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/ya-test.html) | [1374](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [63](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [37](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [25](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14994469002/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-13 14:13:27 UTC` Build successful.
:yellow_circle: `2025-05-13 14:14:00 UTC` ydbd size **3.9 GiB** changed* by **+186.7 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: f91acf568fafeb57e1983ad86e6ca1eb8676355c |merge: 72171ead8c323b8419fce76a74ca101da72f75a5 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 137 928 040** Bytes |**4 138 119 184** Bytes|**+186.7 KiB**|**+0.005%**|
|ydbd stripped size|**1 435 912 736** Bytes|**1 435 972 896** Bytes|**+58.8 KiB**|**+0.004%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/f91acf568fafeb57e1983ad86e6ca1eb8676355c..72171ead8c323b8419fce76a74ca101da72f75a5)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-14T04:26:49Z
body: <!-- status pr=18107, preset=release-asan, run=42843 -->
:white_circle: `2025-05-14 04:26:48 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/15012226357/job/42182954406) **linux-x86_64-release-asan** for dabe07ff944f76f023cb9ea3031d122f9c8f29ae has started.
:white_circle: `2025-05-14 04:26:52 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012226357/ya-x86-64-asan/index.html)
:white_circle: `2025-05-14 04:30:06 UTC` ya make is running...
:black_circle: `2025-05-14 05:17:04 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-14T04:46:43Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42843 -->
:white_circle: `2025-05-14 04:46:42 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/15012226357/job/42182954401) **linux-x86_64-relwithdebinfo** for dabe07ff944f76f023cb9ea3031d122f9c8f29ae has started.
:white_circle: `2025-05-14 04:46:53 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012226357/ya-x86-64/index.html)
:white_circle: `2025-05-14 04:50:09 UTC` ya make is running...
:black_circle: `2025-05-14 05:16:57 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-14T05:20:23Z
body: <!-- status pr=18107, preset=release-asan, run=42848 -->
:white_circle: `2025-05-14 05:20:23 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/15012835716/job/42184632167) **linux-x86_64-release-asan** for 76e81e17f782608aa62dba36746fde91802f8085 has started.
:white_circle: `2025-05-14 05:20:53 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/index.html)
:white_circle: `2025-05-14 05:24:35 UTC` ya make is running...
:yellow_circle: `2025-05-14 06:57:01 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159654) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [15530](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/ya-test.html) | [15214](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [157](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [131](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [28](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-14 06:58:24 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-05-14 07:32:32 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159692) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1467 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/ya-test.html) | [1349](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [58](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-14 07:32:49 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-05-14 08:06:39 UTC` Some tests failed, follow the links below. This fail is not in blocking policy yet

[Test history](https://nebius.testmo.net/automation/runs/view/159707) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [1235 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/ya-test.html) | [1127](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [57](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [24](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-05-14 08:06:54 UTC` Build successful.
:yellow_circle: `2025-05-14 08:07:30 UTC` ydbd size **3.9 GiB** changed* by **+1.9 MiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 2f964b11197fc98cd5b5a8ac3326b50ec73d3da6 |merge: 76e81e17f782608aa62dba36746fde91802f8085 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 138 199 192** Bytes |**4 140 157 752** Bytes|**+1.9 MiB**|**+0.047%**|
|ydbd stripped size|**1 435 994 752** Bytes|**1 437 129 560** Bytes|**+1.1 MiB**|**+0.079%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/2f964b11197fc98cd5b5a8ac3326b50ec73d3da6..76e81e17f782608aa62dba36746fde91802f8085)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-14T05:21:04Z
body: <!-- status pr=18107, preset=relwithdebinfo, run=42848 -->
:white_circle: `2025-05-14 05:21:03 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/15012835716/job/42184632166) **linux-x86_64-relwithdebinfo** for 76e81e17f782608aa62dba36746fde91802f8085 has started.
:white_circle: `2025-05-14 05:21:15 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/index.html)
:white_circle: `2025-05-14 05:24:29 UTC` ya make is running...
:yellow_circle: `2025-05-14 06:39:15 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/159653) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [30395](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/ya-test.html) | [27718](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [1](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/ya-test.html#FAIL) | [2643](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/ya-test.html#SKIP) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-05-14 06:41:56 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-05-14 07:05:08 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/159680) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_2/test_bloat/tree_map.html)
| TESTS | PASSED | ERRORS | FAILED | SKIPPED | MUTED<sup>[?](https://github.com/ydb-platform/ydb/tree/main/.github/config/muted_ya.txt "All mute rules are defined here")</sup> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [118 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_2/ya-test.html) | [87](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | 0 | [31](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/15012835716/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-05-14 07:05:16 UTC` Build successful.
:yellow_circle: `2025-05-14 07:05:38 UTC` ydbd size **2.2 GiB** changed* by **+851.8 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 2f964b11197fc98cd5b5a8ac3326b50ec73d3da6 |merge: 76e81e17f782608aa62dba36746fde91802f8085 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 352 022 696** Bytes |**2 352 894 976** Bytes|**+851.8 KiB**|**+0.037%**|
|ydbd stripped size|**494 258 352** Bytes|**494 551 808** Bytes|**+286.6 KiB**|**+0.059%**|

<sup>*please be aware that the difference is based on comparing your commit and the last completed build from the post-commit, check [comparation](https://github.com/ydb-platform/ydb/compare/2f964b11197fc98cd5b5a8ac3326b50ec73d3da6..76e81e17f782608aa62dba36746fde91802f8085)</sup>
author_association: NONE