Repository: ydb-platform/ydb
Pull request #16232: refactor 'ydb scheme rmdir' implementation
Author: login: jepett0
Labels: name: not-for-changelog
Created: 2025-03-25T17:52:43Z | Merged: 2025-03-28T15:34:09Z

### Changelog entry <!-- a user-readable short description of the changes that goes to CHANGELOG.md and Release Notes -->

### 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 -->

refactoring + tests

Also fixed some bugs:
- We attempted deleting the subdomain if the `--path .` was specified, so the `ydb scheme rmdir` would always result in an error previously in this case.
- We haven't ordered the deletions of external data sources and external tables (the former must be deleted after the latter). It could have led to an error in `ydb scheme rmdir` if it got to the external data source first.
- Straight (non-reverse) order of scheme objects to remove on cleanup on failed restore. This prevented deletion of directories. We have received errors always in this case.

\+ deduplicated code by using the generic RemovePathRecursive on cleanup after a failed restore



Diff:
diff --git a/ydb/apps/ydb/CHANGELOG.md b/ydb/apps/ydb/CHANGELOG.md
index e67d303285b8..49b17f8605df 100644
--- a/ydb/apps/ydb/CHANGELOG.md
+++ b/ydb/apps/ydb/CHANGELOG.md
@@ -1,3 +1,4 @@
+* Fixed bugs in `ydb scheme rmdir`: 1) do not try to delete subdomains, 2) order the deletion of external tables before the deletion of external data sources.
 * YDB CLI help message improvements. Different display for detailed help and brief help.
 * Support coordination nodes in `ydb scheme rmdir --recursive`.
 * Fixed return code of command `ydb workload * run --check-canonical` for the case when benchmark query results differ from canonical ones.
diff --git a/ydb/library/backup/backup.cpp b/ydb/library/backup/backup.cpp
index 856af5ccd26c..6e6ec69a572b 100644
--- a/ydb/library/backup/backup.cpp
+++ b/ydb/library/backup/backup.cpp
@@ -935,9 +935,7 @@ void RemoveClusterDirectory(const TDriver& driver, const TString& path) {
 
 void RemoveClusterDirectoryRecursive(const TDriver& driver, const TString& path) {
     LOG_I("Remove temporary directory " << path.Quote() << " in database");
-    NScheme::TSchemeClient schemeClient(driver);
-    NTable::TTableClient tableClient(driver);
-    TStatus status = NConsoleClient::RemoveDirectoryRecursive(schemeClient, tableClient, path, {}, true, false);
+    TStatus status = NConsoleClient::RemoveDirectoryRecursive(driver, path);
     VerifyStatus(status, TStringBuilder() << "Remove temporary directory " << path.Quote() << " failed");
 }
 
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_service_scheme.cpp b/ydb/public/lib/ydb_cli/commands/ydb_service_scheme.cpp
index 8c34c319457c..cc1b2bfccbd4 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_service_scheme.cpp
+++ b/ydb/public/lib/ydb_cli/commands/ydb_service_scheme.cpp
@@ -87,12 +87,10 @@ int TCommandRemoveDirectory::Run(TConfig& config) {
     const auto settings = FillSettings(NScheme::TRemoveDirectorySettings());
 
     if (Recursive) {
-        NTable::TTableClient tableClient(driver);
-        NTopic::TTopicClient topicClient(driver);
-        NQuery::TQueryClient queryClient(driver);
-        NCoordination::TClient coordinationClient(driver);
-        const auto prompt = Prompt.GetOrElse(ERecursiveRemovePrompt::Once);
-        NStatusHelpers::ThrowOnErrorOrPrintIssues(RemoveDirectoryRecursive(schemeClient, tableClient, &topicClient, &queryClient, &coordinationClient, Path, prompt, settings));
+        const auto settings = TRemoveDirectoryRecursiveSettings()
+            .Prompt(Prompt.GetOrElse(ERecursiveRemovePrompt::Once))
+            .CreateProgressBar(true);
+        NStatusHelpers::ThrowOnErrorOrPrintIssues(RemoveDirectoryRecursive(driver, Path, settings));
     } else {
         if (Prompt) {
             if (!NConsoleClient::Prompt(*Prompt, Path, NScheme::ESchemeEntryType::Directory)) {
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_workload.cpp b/ydb/public/lib/ydb_cli/commands/ydb_workload.cpp
index 94ec766b5e05..320f7f2373fa 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_workload.cpp
+++ b/ydb/public/lib/ydb_cli/commands/ydb_workload.cpp
@@ -389,7 +389,7 @@ int TWorkloadCommandBase::Run(TConfig& config) {
 
 void TWorkloadCommandBase::CleanTables(NYdbWorkload::IWorkloadQueryGenerator& workloadGen, TConfig& config) {
     auto pathsToDelete = workloadGen.GetCleanPaths();
-    TRemovePathRecursiveSettings settings;
+    TRemoveDirectoryRecursiveSettings settings;
     settings.NotExistsIsOk(true);
     for (const auto& path : pathsToDelete) {
         Cout << "Remove path " << path << "..."  << Endl;
@@ -397,7 +397,7 @@ void TWorkloadCommandBase::CleanTables(NYdbWorkload::IWorkloadQueryGenerator& wo
         if (DryRun) {
             Cout << "Remove " << fullPath << Endl;
         } else {
-            NStatusHelpers::ThrowOnErrorOrPrintIssues(RemovePathRecursive(*SchemeClient, *TableClient, TopicClient.Get(), QueryClient.Get(), nullptr, fullPath, ERecursiveRemovePrompt::Never, settings));
+            NStatusHelpers::ThrowOnErrorOrPrintIssues(RemovePathRecursive(*Driver.Get(), fullPath, settings));
         }
         Cout << "Remove path " << path << "...Ok"  << Endl;
     }
diff --git a/ydb/public/lib/ydb_cli/common/recursive_remove.cpp b/ydb/public/lib/ydb_cli/common/recursive_remove.cpp
index 1950ad902f0a..1876215da226 100644
--- a/ydb/public/lib/ydb_cli/common/recursive_remove.cpp
+++ b/ydb/public/lib/ydb_cli/common/recursive_remove.cpp
@@ -1,5 +1,4 @@
 #include "interactive.h"
-#include "progress_bar.h"
 #include "recursive_remove.h"
 
 #include <ydb/public/lib/ydb_cli/common/recursive_list.h>
@@ -106,16 +105,17 @@ template <typename TClient, typename TSettings>
 using TRemoveFunc = TStatus(*)(TClient&, const TString&, const TSettings&);
 
 template <typename TClient, typename TSettings>
-TStatus Remove(TRemoveFunc<TClient, TSettings> func, TSchemeClient& schemeClient, TClient* client, const ESchemeEntryType type,
-        const TString& path, ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings)
-{
-    if (!client) {
-        return TStatus(EStatus::GENERIC_ERROR, MakeIssues(TStringBuilder()
-            << TypeName<TClient>() << " not specified"));
-    }
-
+TStatus Remove(
+    TRemoveFunc<TClient, TSettings> func,
+    TSchemeClient& schemeClient,
+    TClient& specializedClient,
+    const ESchemeEntryType type,
+    const TString& path,
+    ERecursiveRemovePrompt prompt,
+    const TRemoveDirectorySettings& settings
+) {
     if (Prompt(prompt, path, type, false)) {
-        auto status = func(*client, path, TSettings(settings));
+        auto status = func(specializedClient, path, TSettings(settings));
         if (status.GetStatus() == EStatus::SCHEME_ERROR && schemeClient.DescribePath(path).ExtractValueSync().GetStatus() == EStatus::SCHEME_ERROR) {
             Cerr << "WARNING: Couldn't delete path: \'" << path << "\'. It was probably already deleted in another process" << Endl;
             return TStatus(EStatus::SUCCESS, {});
@@ -127,12 +127,19 @@ TStatus Remove(TRemoveFunc<TClient, TSettings> func, TSchemeClient& schemeClient
 }
 
 TStatus Remove(
-    TSchemeClient& schemeClient, TTableClient* tableClient, TTopicClient* topicClient, NQuery::TQueryClient* queryClient, NCoordination::TClient* coordinationClient,
-    const ESchemeEntryType type, const TString& path, ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings)
-{
+    TSchemeClient& schemeClient,
+    TTableClient& tableClient,
+    TTopicClient& topicClient,
+    NQuery::TQueryClient& queryClient,
+    NCoordination::TClient& coordinationClient,
+    const ESchemeEntryType type,
+    const TString& path,
+    ERecursiveRemovePrompt prompt,
+    const TRemoveDirectorySettings& settings
+) {
     switch (type) {
     case ESchemeEntryType::Directory:
-        return Remove(&RemoveDirectory, schemeClient, &schemeClient, type, path, prompt, settings);
+        return Remove(&RemoveDirectory, schemeClient, schemeClient, type, path, prompt, settings);
 
     case ESchemeEntryType::ColumnStore:
         return Remove(&RemoveColumnStore, schemeClient, tableClient, type, path, prompt, settings);
@@ -151,6 +158,9 @@ TStatus Remove(
         return Remove(&RemoveView, schemeClient, queryClient, type, path, prompt, settings);
     case ESchemeEntryType::CoordinationNode:
         return Remove(&RemoveCoordinationNode, schemeClient, coordinationClient, type, path, prompt, settings);
+    case ESchemeEntryType::SubDomain:
+        // continue silently
+        return TStatus(EStatus::SUCCESS, {});
 
     default:
         return TStatus(EStatus::UNSUPPORTED, MakeIssues(TStringBuilder()
@@ -159,73 +169,63 @@ TStatus Remove(
 }
 
 TStatus RemoveDirectoryRecursive(
-        TSchemeClient& schemeClient,
-        TTableClient* tableClient,
-        TTopicClient* topicClient,
-        NQuery::TQueryClient* queryClient,
-        NCoordination::TClient* coordinationClient,
-        const TString& path,
-        ERecursiveRemovePrompt prompt,
-        const TRemoveDirectorySettings& settings,
-        bool removeSelf,
-        bool createProgressBar)
-{
-    auto recursiveListResult = RecursiveList(schemeClient, path, {}, removeSelf);
+    TSchemeClient& schemeClient,
+    TTableClient& tableClient,
+    TTopicClient& topicClient,
+    NQuery::TQueryClient& queryClient,
+    NCoordination::TClient& coordinationClient,
+    const TString& path,
+    const TRemoveDirectoryRecursiveSettings& settings
+) {
+    const auto listingSettings = TRecursiveListSettings()
+        .Filter([](const TSchemeEntry& entry) {
+            // explicitly skip subdomains
+            return entry.Type != ESchemeEntryType::SubDomain;
+        });
+    auto recursiveListResult = RecursiveList(schemeClient, path, listingSettings, settings.RemoveSelf_);
     if (!recursiveListResult.Status.IsSuccess()) {
         return recursiveListResult.Status;
     }
 
-    if (prompt == ERecursiveRemovePrompt::Once) {
+    if (settings.Prompt_ == ERecursiveRemovePrompt::Once) {
         if (!Prompt(path, ESchemeEntryType::Directory)) {
             return TStatus(EStatus::SUCCESS, {});
         }
     }
 
-    std::unique_ptr<TProgressBar> bar;
-    if (createProgressBar) {
-        bar = std::make_unique<TProgressBar>(recursiveListResult.Entries.size());
-    }
-    // output order is: Root, Recursive(children)...
-    // we need to reverse it to delete recursively
-    for (auto it = recursiveListResult.Entries.rbegin(); it != recursiveListResult.Entries.rend(); ++it) {
-        if (auto result = Remove(schemeClient, tableClient, topicClient, queryClient, coordinationClient, it->Type, TString{it->Name}, prompt, settings); !result.IsSuccess()) {
-            return result;
-        }
-        if (createProgressBar) {
-            bar->AddProgress(1);
-        }
-    }
-
-    return TStatus(EStatus::SUCCESS, {});
+    // RecursiveList outputs elements in pre-order: root, recurse(children)...
+    // We need to reverse it to delete scheme objects before directories.
+    return RemovePathsRecursive(
+        schemeClient,
+        tableClient,
+        topicClient,
+        queryClient,
+        coordinationClient,
+        recursiveListResult.Entries.rbegin(),
+        recursiveListResult.Entries.rend(),
+        settings
+    );
 }
 
 TStatus RemoveDirectoryRecursive(
-        TSchemeClient& schemeClient,
-        TTableClient& tableClient,
-        const TString& path,
-        const TRemoveDirectorySettings& settings,
-        bool removeSelf,
-        bool createProgressBar)
-{
-    return RemoveDirectoryRecursive(schemeClient, &tableClient, nullptr, nullptr, nullptr, path, ERecursiveRemovePrompt::Never, settings, removeSelf, createProgressBar);
+    const TDriver& driver,
+    const TString& path,
+    const TRemoveDirectoryRecursiveSettings& settings
+) {
+    TSchemeClient schemeClient(driver);
+    TTableClient tableClient(driver);
+    TTopicClient topicClient(driver);
+    NQuery::TQueryClient queryClient(driver);
+    NCoordination::TClient coordinationClient(driver);
+    return RemoveDirectoryRecursive(schemeClient, tableClient, topicClient, queryClient, coordinationClient, path, settings);
 }
 
-TStatus RemoveDirectoryRecursive(
-        TSchemeClient& schemeClient,
-        TTableClient& tableClient,
-        TTopicClient* topicClient,
-        NQuery::TQueryClient* queryClient,
-        NCoordination::TClient* coordinationClient,
-        const TString& path,
-        ERecursiveRemovePrompt prompt,
-        const TRemoveDirectorySettings& settings,
-        bool removeSelf,
-        bool createProgressBar)
-{
-    return RemoveDirectoryRecursive(schemeClient, &tableClient, topicClient, queryClient, coordinationClient, path, prompt, settings, removeSelf, createProgressBar);
-}
-
-NYdb::TStatus RemovePathRecursive(NScheme::TSchemeClient& schemeClient, NTable::TTableClient& tableClient, NTopic::TTopicClient* topicClient, NQuery::TQueryClient* queryClient, NCoordination::TClient* coordinationClient, const TString& path, ERecursiveRemovePrompt prompt, const TRemovePathRecursiveSettings& settings /*= {}*/, bool createProgressBar /*= true*/) {
+TStatus RemovePathRecursive(
+    const TDriver& driver,
+    const TString& path,
+    const TRemoveDirectoryRecursiveSettings& settings
+) {
+    TSchemeClient schemeClient(driver);
     auto entity = schemeClient.DescribePath(path).ExtractValueSync();
     if (!entity.IsSuccess()) {
         if (settings.NotExistsIsOk_ && entity.GetStatus() == EStatus::SCHEME_ERROR && entity.GetIssues().ToString().find("Path not found") != TString::npos) {
@@ -233,12 +233,55 @@ NYdb::TStatus RemovePathRecursive(NScheme::TSchemeClient& schemeClient, NTable::
         }
         return entity;
     }
-    switch (entity.GetEntry().Type) {
-    case ESchemeEntryType::Directory:
-    case ESchemeEntryType::ColumnStore:
-        return RemoveDirectoryRecursive(schemeClient, tableClient, topicClient, queryClient, coordinationClient, path, prompt, settings, true, createProgressBar);
-    default:
-        return Remove(schemeClient, &tableClient, topicClient, queryClient, coordinationClient, entity.GetEntry().Type, path, prompt, settings);
+
+    TTableClient tableClient(driver);
+    TTopicClient topicClient(driver);
+    NQuery::TQueryClient queryClient(driver);
+    NCoordination::TClient coordinationClient(driver);
+    auto remover = NInternal::CreateDefaultRemover(schemeClient, tableClient, topicClient, queryClient, coordinationClient, settings);
+    return remover(entity.GetEntry());
+}
+
+TStatus RemovePathRecursive(
+    const TDriver& driver,
+    const TSchemeEntry& entry,
+    const TRemoveDirectoryRecursiveSettings& settings
+) {
+    TSchemeClient schemeClient(driver);
+    TTableClient tableClient(driver);
+    TTopicClient topicClient(driver);
+    NQuery::TQueryClient queryClient(driver);
+    NCoordination::TClient coordinationClient(driver);
+    auto remover = NInternal::CreateDefaultRemover(schemeClient, tableClient, topicClient, queryClient, coordinationClient, settings);
+    return remover(entry);
+}
+
+namespace NInternal {
+
+    TRemover CreateDefaultRemover(
+        NScheme::TSchemeClient& schemeClient,
+        NTable::TTableClient& tableClient,
+        NTopic::TTopicClient& topicClient,
+        NQuery::TQueryClient& queryClient,
+        NCoordination::TClient& coordinationClient,
+        const TRemoveDirectoryRecursiveSettings& settings
+    ) {
+        return [&](const TSchemeEntry& entry) {
+            return Remove(schemeClient, tableClient, topicClient, queryClient, coordinationClient, entry.Type, TString(entry.Name), settings.Prompt_, settings);
+        };
     }
+
+    bool MightHaveDependents(ESchemeEntryType type) {
+        switch (type) {
+        // directories might contain external data sources, which might have dependent objects (i.e. external tables)
+        case ESchemeEntryType::Directory:
+        case ESchemeEntryType::ExternalDataSource:
+            return true;
+        default:
+            return false;
+        }
+    }
+
 }
+
 }
diff --git a/ydb/public/lib/ydb_cli/common/recursive_remove.h b/ydb/public/lib/ydb_cli/common/recursive_remove.h
index ed990662e360..f1e93e7e0871 100644
--- a/ydb/public/lib/ydb_cli/common/recursive_remove.h
+++ b/ydb/public/lib/ydb_cli/common/recursive_remove.h
@@ -1,11 +1,15 @@
 #pragma once
 
+#include "progress_bar.h"
+
 #include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/coordination/coordination.h>
 #include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/query/client.h>
 #include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/scheme/scheme.h>
 #include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h>
 #include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/topic/client.h>
 
+#include <ranges>
+
 namespace NYdb::NConsoleClient {
 
 enum class ERecursiveRemovePrompt {
@@ -14,41 +18,106 @@ enum class ERecursiveRemovePrompt {
     Never,
 };
 
-struct TRemovePathRecursiveSettings : public NScheme::TRemoveDirectorySettings {
+struct TRemoveDirectoryRecursiveSettings : public NScheme::TRemoveDirectorySettings {
+    using TSelf = TRemoveDirectoryRecursiveSettings;
+
     FLUENT_SETTING_DEFAULT(bool, NotExistsIsOk, false);
+    FLUENT_SETTING_DEFAULT(bool, RemoveSelf, true);
+    FLUENT_SETTING_DEFAULT(bool, CreateProgressBar, false);
+    FLUENT_SETTING_DEFAULT(ERecursiveRemovePrompt, Prompt, ERecursiveRemovePrompt::Never);
 };
 
 bool Prompt(ERecursiveRemovePrompt mode, const TString& path, NScheme::ESchemeEntryType type, bool first = true);
 
 TStatus RemoveDirectoryRecursive(
-    NScheme::TSchemeClient& schemeClient,
-    NTable::TTableClient& tableClient,
+    const TDriver& driver,
     const TString& path,
-    const NScheme::TRemoveDirectorySettings& settings = {},
-    bool removeSelf = true,
-    bool createProgressBar = true);
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
 
-TStatus RemoveDirectoryRecursive(
-    NScheme::TSchemeClient& schemeClient,
-    NTable::TTableClient& tableClient,
-    NTopic::TTopicClient* topicClient,
-    NQuery::TQueryClient* queryClient,
-    NCoordination::TClient* coordinationClient,
+TStatus RemovePathRecursive(
+    const TDriver& driver,
     const TString& path,
-    ERecursiveRemovePrompt prompt,
-    const NScheme::TRemoveDirectorySettings& settings = {},
-    bool removeSelf = true,
-    bool createProgressBar = true);
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
 
 TStatus RemovePathRecursive(
+    const TDriver& driver,
+    const NScheme::TSchemeEntry& entry,
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
+
+namespace NInternal {
+
+    using TRemover = std::function<TStatus(const NScheme::TSchemeEntry&)>;
+
+    TRemover CreateDefaultRemover(
+        NScheme::TSchemeClient& schemeClient,
+        NTable::TTableClient& tableClient,
+        NTopic::TTopicClient& topicClient,
+        NQuery::TQueryClient& queryClient,
+        NCoordination::TClient& coordinationClient,
+        const TRemoveDirectoryRecursiveSettings& settings
+    );
+
+    bool MightHaveDependents(NScheme::ESchemeEntryType type);
+
+    template <typename TIterator>
+    TStatus RemovePathsRecursive(
+        TIterator begin,
+        TIterator end,
+        TRemover& remover,
+        std::optional<TProgressBar> progressBar
+    ) {
+        TVector<const NScheme::TSchemeEntry*> entriesToRemoveInSecondPass;
+        for (const NScheme::TSchemeEntry& entry : std::ranges::subrange(begin, end)) {
+            if (MightHaveDependents(entry.Type)) {
+                entriesToRemoveInSecondPass.emplace_back(&entry);
+                continue;
+            }
+            auto result = remover(entry);
+            if (!result.IsSuccess()) {
+                return result;
+            }
+            if (progressBar) {
+                progressBar->AddProgress(1);
+            }
+        }
+        for (const auto* entry : entriesToRemoveInSecondPass) {
+            auto result = remover(*entry);
+            if (!result.IsSuccess()) {
+                return result;
+            }
+            if (progressBar) {
+                progressBar->AddProgress(1);
+            }
+        }
+        return TStatus(EStatus::SUCCESS, {});
+    }
+
+}
+
+template <typename TIterator>
+TStatus RemovePathsRecursive(
     NScheme::TSchemeClient& schemeClient,
     NTable::TTableClient& tableClient,
-    NTopic::TTopicClient* topicClient,
-    NQuery::TQueryClient* queryClient,
-    NCoordination::TClient* coordinationClient,
-    const TString& path,
-    ERecursiveRemovePrompt prompt,
-    const TRemovePathRecursiveSettings& settings = {},
-    bool createProgressBar = true);
+    NTopic::TTopicClient& topicClient,
+    NQuery::TQueryClient& queryClient,
+    NCoordination::TClient& coordinationClient,
+    TIterator begin,
+    TIterator end,
+    const TRemoveDirectoryRecursiveSettings& settings = {},
+    // overloading of the remover is used only for tests
+    NInternal::TRemover&& remover = {}
+) {
+    if (!remover) {
+        remover = NInternal::CreateDefaultRemover(schemeClient, tableClient, topicClient, queryClient, coordinationClient, settings);
+    }
+    std::optional<TProgressBar> progressBar;
+    if (settings.CreateProgressBar_) {
+        progressBar = std::make_optional<TProgressBar>(end - begin);
+    }
+    return NInternal::RemovePathsRecursive(begin, end, remover, progressBar);
+}
 
 }
diff --git a/ydb/public/lib/ydb_cli/common/recursive_remove_ut.cpp b/ydb/public/lib/ydb_cli/common/recursive_remove_ut.cpp
new file mode 100644
index 000000000000..cd019dafece5
--- /dev/null
+++ b/ydb/public/lib/ydb_cli/common/recursive_remove_ut.cpp
@@ -0,0 +1,44 @@
+#include "recursive_remove.h"
+
+#include <library/cpp/testing/unittest/registar.h>
+
+using namespace NYdb;
+using namespace NConsoleClient;
+using namespace NScheme;
+
+namespace NYdb::NScheme {
+
+bool operator==(const TSchemeEntry& lhs, const TSchemeEntry& rhs) {
+    return std::make_pair(lhs.Name, lhs.Type) == std::make_pair(rhs.Name, rhs.Type);
+}
+
+}
+
+Y_UNIT_TEST_SUITE(RecursiveRemoveTests) {
+
+TSchemeEntry CreateSchemeEntry(ESchemeEntryType type) {
+    TSchemeEntry entry;
+    entry.Type = type;
+    entry.Name = TStringBuilder() << type;
+    return entry;
+}
+
+Y_UNIT_TEST(SecondPass) {
+    TVector<TSchemeEntry> entries = {
+        { CreateSchemeEntry(ESchemeEntryType::Table) },
+        { CreateSchemeEntry(ESchemeEntryType::ExternalDataSource) },
+        { CreateSchemeEntry(ESchemeEntryType::ExternalTable) }
+    };
+
+    TVector<TSchemeEntry> removedEntries;
+    NInternal::TRemover remover = [&removedEntries](const TSchemeEntry& entry) {
+        removedEntries.emplace_back(entry);
+        return TStatus(EStatus::SUCCESS, {});
+    };
+    NInternal::RemovePathsRecursive(entries.begin(), entries.end(), remover, std::nullopt);
+
+    std::swap(entries[1], entries[2]);
+    UNIT_ASSERT_VALUES_EQUAL(removedEntries, entries);
+}
+
+}
diff --git a/ydb/public/lib/ydb_cli/common/ut/ya.make b/ydb/public/lib/ydb_cli/common/ut/ya.make
index f73e26a0269f..f84667f9ee93 100644
--- a/ydb/public/lib/ydb_cli/common/ut/ya.make
+++ b/ydb/public/lib/ydb_cli/common/ut/ya.make
@@ -2,9 +2,10 @@ UNITTEST_FOR(ydb/public/lib/ydb_cli/common)
 
 SRCS(
     cert_format_converter_ut.cpp
-    normalize_path_ut.cpp
     csv_parser_ut.cpp
+    normalize_path_ut.cpp
     pg_dump_parser_ut.cpp
+    recursive_remove_ut.cpp
 )
 
 END()
diff --git a/ydb/public/lib/ydb_cli/common/ya.make b/ydb/public/lib/ydb_cli/common/ya.make
index a3dd0bbc0618..7905d3c4286c 100644
--- a/ydb/public/lib/ydb_cli/common/ya.make
+++ b/ydb/public/lib/ydb_cli/common/ya.make
@@ -47,6 +47,7 @@ PEERDIR(
     ydb/public/lib/json_value
     ydb/public/sdk/cpp/src/library/operation_id
     ydb/public/lib/yson_value
+    ydb/public/sdk/cpp/src/client/coordination
     ydb/public/sdk/cpp/src/client/draft
     ydb/public/sdk/cpp/src/client/query
     ydb/public/sdk/cpp/src/client/result
diff --git a/ydb/public/lib/ydb_cli/dump/restore_impl.cpp b/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
index 2d0b20368a66..1f0bf2e66a33 100644
--- a/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
+++ b/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
@@ -479,89 +479,33 @@ TRestoreResult TRestoreClient::Restore(const TString& fsPath, const TString& dbP
 
     LOG_I("Cleanup");
 
-    // cleanup
-    auto newDirectoryList = RecursiveList(SchemeClient, dbBasePath);
-    if (!newDirectoryList.Status.IsSuccess()) {
+    auto newListing = RecursiveList(SchemeClient, dbBasePath);
+    if (!newListing.Status.IsSuccess()) {
         return restoreResult;
     }
 
-    TVector<const TSchemeEntry*> entriesToDropInSecondPass;
-
-    for (const auto& entry : newDirectoryList.Entries) {
-        if (oldEntries.contains(entry.Name)) {
-            continue;
-        }
-
-        const auto& fullPath = entry.Name; // RecursiveList returns full path instead of entry's name
-        TMaybe<TStatus> result;
-
-        switch (entry.Type) {
-            case ESchemeEntryType::Directory:
-                result = RemoveDirectoryRecursive(SchemeClient, TableClient, &TopicClient, &QueryClient, &CoordinationNodeClient,
-                    TString{fullPath}, ERecursiveRemovePrompt::Never, {}, true, false);
-                break;
-            case ESchemeEntryType::Table:
-                result = TableClient.RetryOperationSync([&path = fullPath](TSession session) {
-                    return session.DropTable(path).GetValueSync();
-                });
-                break;
-            case ESchemeEntryType::View:
-                result = QueryClient.RetryQuerySync([&path = fullPath](NQuery::TSession session) {
-                    return session.ExecuteQuery(std::format("DROP VIEW `{}`;", path),
-                        NQuery::TTxControl::NoTx()).ExtractValueSync();
-                });
-                break;
-            case ESchemeEntryType::Topic:
-                result = RetryFunction([&client = TopicClient, &path = fullPath]() {
-                    return client.DropTopic(path).ExtractValueSync();
-                });
-                break;
-            case ESchemeEntryType::CoordinationNode:
-                result = RetryFunction([&client = CoordinationNodeClient, &path = fullPath]() {
-                    return client.DropNode(path).ExtractValueSync();
-                });
-                break;
-            case ESchemeEntryType::ExternalDataSource:
-                entriesToDropInSecondPass.emplace_back(&entry);
-                continue;
-            case ESchemeEntryType::ExternalTable:
-                result = QueryClient.RetryQuerySync([&path = fullPath](NQuery::TSession session) {
-                    return session.ExecuteQuery(std::format("DROP EXTERNAL TABLE `{}`;", path),
-                        NQuery::TTxControl::NoTx()).ExtractValueSync();
-                });
-                break;
-            default:
-                break;
-        }
-
-        if (!result) {
-            LOG_E("Error removing unexpected object: " << TString{fullPath}.Quote());
-            return restoreResult;
-        } else if (!result->IsSuccess()) {
-            LOG_E("Error removing " << entry.Type << ": " << TString{fullPath}.Quote()
-                << ", issues: " << result->GetIssues().ToOneLineString());
-            return restoreResult;
-        }
-    }
+    // Why don't we use the built-in RecursiveList filter?
+    // TSchemeEntry::Name is rewritten in the RecursiveList to become the full path to the object.
+    // Until it is rewritten, we can only use the entry name to filter it out, which is not enough.
+    std::erase_if(newListing.Entries, [&oldEntries](const TSchemeEntry& entry) {
+        return oldEntries.contains(entry.Name);
+    });
 
-    for (const auto* entry : entriesToDropInSecondPass) {
-        TMaybe<TStatus> result;
-        switch (entry->Type) {
-            case ESchemeEntryType::ExternalDataSource:
-                result = QueryClient.RetryQuerySync([&path = entry->Name](NQuery::TSession session) {
-                    return session.ExecuteQuery(std::format("DROP EXTERNAL DATA SOURCE `{}`;", path),
-                        NQuery::TTxControl::NoTx()).ExtractValueSync();
-                });
-                break;
-            default:
-                break;
-        }
-        Y_ENSURE(result, "Unexpected entry to drop in the second pass");
-        if (!result->IsSuccess()) {
-            LOG_E("Error removing " << entry->Type << ": " << TString{entry->Name}.Quote()
-                << ", issues: " << result->GetIssues().ToOneLineString());
-            return restoreResult;
-        }
+    // Why do we reverse the list?
+    // RecursiveList outputs elements in pre-order: root, root's children, ...
+    // We reverse it to delete scheme objects before directories.
+    auto cleanupResult = RemovePathsRecursive(
+        SchemeClient,
+        TableClient,
+        TopicClient,
+        QueryClient,
+        CoordinationNodeClient,
+        newListing.Entries.rbegin(),
+        newListing.Entries.rend()
+    );
+    if (!cleanupResult.IsSuccess()) {
+        LOG_E("Error on cleanup, issues: " << cleanupResult.GetIssues().ToOneLineString());
+        return restoreResult;
     }
 
     return restoreResult;
diff --git a/ydb/tests/functional/ydb_cli/test_ydb_recursive_remove.py b/ydb/tests/functional/ydb_cli/test_ydb_recursive_remove.py
new file mode 100644
index 000000000000..e7ca6ba79440
--- /dev/null
+++ b/ydb/tests/functional/ydb_cli/test_ydb_recursive_remove.py
@@ -0,0 +1,91 @@
+from hamcrest import assert_that, only_contains
+import os
+import pytest
+
+import yatest
+
+CLUSTER_CONFIG = dict(extra_feature_flags=["enable_external_data_sources"])
+
+
+def bin_from_env(var):
+    if os.getenv(var):
+        return yatest.common.binary_path(os.getenv(var))
+    raise RuntimeError(f"{var} environment variable is not specified")
+
+
+def ydb_bin():
+    return bin_from_env("YDB_CLI_BINARY")
+
+
+def execute_ydb_cli_command(node, database, args, stdin=None):
+    execution = yatest.common.execute(
+        [ydb_bin(), "--endpoint", f"grpc://{node.host}:{node.grpc_port}", "--database", database] + args, stdin=stdin
+    )
+    return execution.std_out.decode("utf-8")
+
+
+def create_table(session, table):
+    session.execute_scheme(
+        f"""
+        CREATE TABLE `{table}` (key Int, value Utf8, PRIMARY KEY(key));
+        """
+    )
+
+
+def create_view(session, view, query="SELECT 42"):
+    session.execute_scheme(
+        f"""
+        CREATE VIEW `{view}` WITH security_invoker = TRUE AS {query};
+        """
+    )
+
+
+def create_external_data_source(session, external_data_source):
+    session.execute_scheme(
+        f"""
+        CREATE EXTERNAL DATA SOURCE `{external_data_source}` WITH (
+            SOURCE_TYPE="ObjectStorage",
+            LOCATION="192.168.1.1:8123",
+            AUTH_METHOD="NONE"
+        );
+        """
+    )
+
+
+def create_external_table(session, external_table, external_data_source):
+    session.execute_scheme(
+        f"""
+        CREATE EXTERNAL TABLE `{external_table}` (
+            key Utf8 NOT NULL,
+            value Utf8 NOT NULL
+        ) WITH (
+            DATA_SOURCE="{external_data_source}",
+            LOCATION="folder",
+            FORMAT="csv_with_names",
+            COMPRESSION="gzip"
+        );
+        """
+    )
+
+
+class TestRecursiveRemove:
+    @pytest.fixture(autouse=True, scope="function")
+    def init_test(self, tmp_path):
+        self.tmp_path = tmp_path
+
+    def test_various_scheme_objects(self, ydb_cluster, ydb_database, ydb_client, ydb_client_session):
+        database_path = ydb_database
+        driver = ydb_client(database_path)
+        session_pool = ydb_client_session(database_path)
+        with session_pool.checkout() as session:
+            create_table(session, "table")
+            create_view(session, "views/view")
+            create_external_data_source(session, "externals/data_source")
+            create_external_table(session, "externals/table", "externals/data_source")
+            execute_ydb_cli_command(
+                ydb_cluster.nodes[1], database_path, ["scheme", "rmdir", "--recursive", "--force", "."]
+            )
+            assert_that(
+                [child.name for child in driver.scheme_client.list_directory(database_path).children],
+                only_contains(".metadata", ".sys"),
+            )
diff --git a/ydb/tests/functional/ydb_cli/ya.make b/ydb/tests/functional/ydb_cli/ya.make
index 4be1fe109567..0904b7c43047 100644
--- a/ydb/tests/functional/ydb_cli/ya.make
+++ b/ydb/tests/functional/ydb_cli/ya.make
@@ -3,12 +3,13 @@ PY3TEST()
 TEST_SRCS(
     conftest.py
     test_ydb_backup.py
-    test_ydb_table.py
-    test_ydb_scripting.py
-    test_ydb_impex.py
     test_ydb_flame_graph.py
+    test_ydb_impex.py
+    test_ydb_recursive_remove.py
     test_ydb_scheme.py
+    test_ydb_scripting.py
     test_ydb_sql.py
+    test_ydb_table.py
 )
 
 ENV(YDB_DRIVER_BINARY="ydb/apps/ydbd/ydbd")


Reviews:
user: login: CyberROFL
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-26T14:13:57Z
user: login: CyberROFL
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-03-26T17:08:13Z
user: login: pnv1
state: DISMISSED
author_association: COLLABORATOR
submitted_at: 2025-03-28T09:14:54Z
user: login: CyberROFL
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-28T10:14:47Z
user: login: CyberROFL
body: https://github.com/ydb-platform/ydb/pull/16232#discussion_r2018311774
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-28T10:15:08Z
user: login: CyberROFL
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-28T14:23:54Z
user: login: pnv1
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-03-28T15:33:53Z

Review comments:
diff_hunk: @@ -935,9 +935,7 @@ void RemoveClusterDirectory(const TDriver& driver, const TString& path) {
 
 void RemoveClusterDirectoryRecursive(const TDriver& driver, const TString& path) {
     LOG_I("Remove temporary directory " << path.Quote() << " in database");
-    NScheme::TSchemeClient schemeClient(driver);
-    NTable::TTableClient tableClient(driver);
-    TStatus status = NConsoleClient::RemoveDirectoryRecursive(schemeClient, tableClient, path, {}, true, false);
+    TStatus status = NConsoleClient::RemoveDirectoryRecursive(driver, path, {});
path: ydb/library/backup/backup.cpp
user: login: CyberROFL
body: ```suggestion
    TStatus status = NConsoleClient::RemoveDirectoryRecursive(driver, path);
```
created_at: 2025-03-26T14:02:38Z
author_association: MEMBER
diff_hunk: @@ -14,41 +18,106 @@ enum class ERecursiveRemovePrompt {
     Never,
 };
 
-struct TRemovePathRecursiveSettings : public NScheme::TRemoveDirectorySettings {
+struct TRemoveDirectoryRecursiveSettings : public NScheme::TRemoveDirectorySettings {
+    using TSelf = TRemoveDirectoryRecursiveSettings;
+
     FLUENT_SETTING_DEFAULT(bool, NotExistsIsOk, false);
+    FLUENT_SETTING_DEFAULT(bool, RemoveSelf, true);
+    FLUENT_SETTING_DEFAULT(bool, CreateProgressBar, false);
+    FLUENT_SETTING_DEFAULT(ERecursiveRemovePrompt, Prompt, ERecursiveRemovePrompt::Never);
 };
 
 bool Prompt(ERecursiveRemovePrompt mode, const TString& path, NScheme::ESchemeEntryType type, bool first = true);
 
 TStatus RemoveDirectoryRecursive(
-    NScheme::TSchemeClient& schemeClient,
-    NTable::TTableClient& tableClient,
+    const TDriver& driver,
     const TString& path,
-    const NScheme::TRemoveDirectorySettings& settings = {},
-    bool removeSelf = true,
-    bool createProgressBar = true);
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
 
-TStatus RemoveDirectoryRecursive(
-    NScheme::TSchemeClient& schemeClient,
-    NTable::TTableClient& tableClient,
-    NTopic::TTopicClient* topicClient,
-    NQuery::TQueryClient* queryClient,
-    NCoordination::TClient* coordinationClient,
+TStatus RemovePathRecursive(
+    const TDriver& driver,
     const TString& path,
-    ERecursiveRemovePrompt prompt,
-    const NScheme::TRemoveDirectorySettings& settings = {},
-    bool removeSelf = true,
-    bool createProgressBar = true);
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
 
 TStatus RemovePathRecursive(
+    const TDriver& driver,
+    const NScheme::TSchemeEntry& entry,
+    const TRemoveDirectoryRecursiveSettings& settings = {}
+);
+
+namespace NInternal {
+
+    using TRemover = std::function<TStatus(const NScheme::TSchemeEntry&)>;
+
+    TRemover CreateDefaultRemover(
+        NScheme::TSchemeClient& schemeClient,
+        NTable::TTableClient& tableClient,
+        NTopic::TTopicClient& topicClient,
+        NQuery::TQueryClient& queryClient,
+        NCoordination::TClient& coordinationClient,
+        const TRemoveDirectoryRecursiveSettings& settings
+    );
+
+    bool MightHaveDependents(NScheme::ESchemeEntryType type);
+
+    template <typename TIterator>
+    TStatus RemovePathsRecursive(
+        TIterator begin,
+        TIterator end,
+        TRemover& remover,
+        std::optional<TProgressBar> progressBar
+    ) {
+        TVector<const NScheme::TSchemeEntry*> entriesToRemoveInSecondPass;
+        for (const NScheme::TSchemeEntry& entry : std::ranges::subrange(begin, end)) {
+            if (NInternal::MightHaveDependents(entry.Type)) {
path: ydb/public/lib/ydb_cli/common/recursive_remove.h
user: login: CyberROFL
body: ```suggestion
            if (MightHaveDependents(entry.Type)) {
```
created_at: 2025-03-26T14:07:51Z
author_association: MEMBER
diff_hunk: @@ -935,9 +935,7 @@ void RemoveClusterDirectory(const TDriver& driver, const TString& path) {
 
 void RemoveClusterDirectoryRecursive(const TDriver& driver, const TString& path) {
     LOG_I("Remove temporary directory " << path.Quote() << " in database");
-    NScheme::TSchemeClient schemeClient(driver);
-    NTable::TTableClient tableClient(driver);
-    TStatus status = NConsoleClient::RemoveDirectoryRecursive(schemeClient, tableClient, path, {}, true, false);
+    TStatus status = NConsoleClient::RemoveDirectoryRecursive(driver, path, {});
path: ydb/library/backup/backup.cpp
user: login: CyberROFL
body: ```suggestion
    TStatus status = NConsoleClient::RemoveDirectoryRecursive(driver, path);
```
created_at: 2025-03-28T10:13:49Z
author_association: MEMBER

PR comments:
user: login: github-actions[bot]
created_at: 2025-03-25T17:53:54Z
body: <!-- status pr=16232, validate PR description status -->
:green_circle: `2025-03-26 13:36:58 UTC` The validation of the Pull Request description is successful.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-25T17:57:36Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38269 -->
:white_circle: `2025-03-25 17:57:35 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14066758813/job/39391127543) **linux-x86_64-relwithdebinfo** for 9afa234781717898e6e7414994a8b070b6213da6 has started.
:white_circle: `2025-03-25 17:57:49 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066758813/ya-x86-64/index.html)
:black_circle: `2025-03-25 18:00:39 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-25T17:57:36Z
body: <!-- status pr=16232, preset=release-asan, run=38269 -->
:white_circle: `2025-03-25 17:57:36 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14066758813/job/39391127542) **linux-x86_64-release-asan** for 9afa234781717898e6e7414994a8b070b6213da6 has started.
:white_circle: `2025-03-25 17:57:51 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066758813/ya-x86-64-asan/index.html)
:black_circle: `2025-03-25 18:00:39 UTC` Check cancelled
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-25T18:02:03Z
body: <!-- status pr=16232, preset=release-asan, run=38270 -->
:white_circle: `2025-03-25 18:02:03 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14066831636/job/39391400594) **linux-x86_64-release-asan** for 81302e8726f2f6b024d7cb7ab6ec67cf2133a956 has started.
:white_circle: `2025-03-25 18:02:17 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/index.html)
:white_circle: `2025-03-25 18:05:11 UTC` ya make is running...
:yellow_circle: `2025-03-25 19:35:35 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/131135) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [12390](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_1/ya-test.html) | [12305](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [37](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [16](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [32](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-25 19:36:53 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-25 19:50:29 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/131190) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [113 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_2/ya-test.html) | [75](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [30](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-25 19:50:38 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-03-25 20:02:50 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/131201) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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/14066831636/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/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [59 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_3/ya-test.html) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [3](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [3](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-25 20:03:00 UTC` Build successful.
:green_circle: `2025-03-25 20:03:30 UTC` ydbd size **3.8 GiB** changed* by **-96 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: f7971e1316de1e6d477de2a8ea39a23b4031c4d5 |merge: 81302e8726f2f6b024d7cb7ab6ec67cf2133a956 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 085 067 968** Bytes |**4 085 067 872** Bytes|**-96 Bytes**|**-0.000%**|
|ydbd stripped size|**1 411 362 856** Bytes|**1 411 362 792** Bytes|**-64 Bytes**|**-0.000%**|

<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/f7971e1316de1e6d477de2a8ea39a23b4031c4d5..81302e8726f2f6b024d7cb7ab6ec67cf2133a956)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-25T18:05:18Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38270 -->
:white_circle: `2025-03-25 18:05:18 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14066831636/job/39391400616) **linux-x86_64-relwithdebinfo** for 81302e8726f2f6b024d7cb7ab6ec67cf2133a956 has started.
:white_circle: `2025-03-25 18:05:33 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/index.html)
:white_circle: `2025-03-25 18:08:22 UTC` ya make is running...
:yellow_circle: `2025-03-25 19:19:48 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/131141) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [26888](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/ya-test.html) | [24229](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [7](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/ya-test.html#FAIL) | [2542](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/ya-test.html#SKIP) | [110](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-25 19:22:12 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-25 19:34:50 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/131183) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [163 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_2/ya-test.html) | [61](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_2/ya-test.html#PASS) | 0 | [1](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_2/ya-test.html#FAIL) | 0 | [101](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-25 19:35:03 UTC` ya make is running... (failed tests rerun, try 3)
:red_circle: `2025-03-25 19:45:59 UTC` Some tests failed, follow the links below.

[Test history](https://nebius.testmo.net/automation/runs/view/131188) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_2/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [140 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_3/ya-test.html) | [40](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_3/ya-test.html#PASS) | 0 | [1](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_3/ya-test.html#FAIL) | 0 | [99](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14066831636/ya-x86-64/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-25 19:46:06 UTC` Build successful.
:green_circle: `2025-03-25 19:46:31 UTC` ydbd size **2.2 GiB** changed* by **0 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: f7971e1316de1e6d477de2a8ea39a23b4031c4d5 |merge: 81302e8726f2f6b024d7cb7ab6ec67cf2133a956 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 322 075 280** Bytes |**2 322 075 280** Bytes|**0 Bytes**|**0.000%**|
|ydbd stripped size|**485 431 104** Bytes|**485 431 104** Bytes|**0 Bytes**|**0.000%**|

<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/f7971e1316de1e6d477de2a8ea39a23b4031c4d5..81302e8726f2f6b024d7cb7ab6ec67cf2133a956)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-26T12:57:22Z
body: <!-- status pr=16232, preset=release-asan, run=38380 -->
:white_circle: `2025-03-26 12:57:21 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14083312970/job/39441059598) **linux-x86_64-release-asan** for 358beaa98db4f47c710c9c0928fc868377150276 has started.
:white_circle: `2025-03-26 12:57:51 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/index.html)
:white_circle: `2025-03-26 13:01:06 UTC` ya make is running...
:yellow_circle: `2025-03-26 14:18:14 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/131609) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [12397](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_1/ya-test.html) | [12297](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [44](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [21](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [35](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 14:19:44 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-26 14:34:43 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/131682) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/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/14083312970/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [143 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_2/ya-test.html) | [106](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [3](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [30](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 14:34:55 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-03-26 14:51:24 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/131693) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/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/14083312970/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/14083312970/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [61 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_3/ya-test.html) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [26](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-26 14:51:35 UTC` Build successful.
:yellow_circle: `2025-03-26 14:52:05 UTC` ydbd size **3.8 GiB** changed* by **+221.1 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 22ccfe5f2fd4827ebdca8e5dbc821fbb3528a696 |merge: 358beaa98db4f47c710c9c0928fc868377150276 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 110 540 160** Bytes |**4 110 766 544** Bytes|**+221.1 KiB**|**+0.006%**|
|ydbd stripped size|**1 420 396 008** Bytes|**1 420 472 680** Bytes|**+74.9 KiB**|**+0.005%**|

<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/22ccfe5f2fd4827ebdca8e5dbc821fbb3528a696..358beaa98db4f47c710c9c0928fc868377150276)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-26T13:03:34Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38380 -->
:white_circle: `2025-03-26 13:03:34 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14083312970/job/39441059596) **linux-x86_64-relwithdebinfo** for 358beaa98db4f47c710c9c0928fc868377150276 has started.
:white_circle: `2025-03-26 13:04:03 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/index.html)
:white_circle: `2025-03-26 13:07:20 UTC` ya make is running...
:yellow_circle: `2025-03-26 14:18:39 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/131616) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [26900](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/ya-test.html) | [24241](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [5](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/ya-test.html#FAIL) | [2543](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/ya-test.html#SKIP) | [111](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 14:21:26 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-03-26 14:34:43 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/131685) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [164 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_2/ya-test.html) | [63](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | 0 | [101](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14083312970/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-03-26 14:34:53 UTC` Build successful.
:yellow_circle: `2025-03-26 14:35:13 UTC` ydbd size **2.2 GiB** changed* by **+106.8 KiB**, which is >= 100.0 KiB vs main: **Warning**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 22ccfe5f2fd4827ebdca8e5dbc821fbb3528a696 |merge: 358beaa98db4f47c710c9c0928fc868377150276 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 342 731 376** Bytes |**2 342 840 728** Bytes|**+106.8 KiB**|**+0.005%**|
|ydbd stripped size|**489 884 928** Bytes|**489 905 088** Bytes|**+19.7 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/22ccfe5f2fd4827ebdca8e5dbc821fbb3528a696..358beaa98db4f47c710c9c0928fc868377150276)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-26T16:43:09Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38426 -->
:white_circle: `2025-03-26 16:43:08 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14088778639/job/39459825205) **linux-x86_64-relwithdebinfo** for 6329678870f051962be32cd316a9418fd714d2ba has started.
:white_circle: `2025-03-26 16:43:13 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/index.html)
:white_circle: `2025-03-26 16:46:06 UTC` ya make is running...
:yellow_circle: `2025-03-26 17:55:04 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/131825) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [26906](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/ya-test.html) | [24246](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [5](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/ya-test.html#FAIL) | [2542](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/ya-test.html#SKIP) | [113](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 17:57:53 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-03-26 18:12:19 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/131892) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [163 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_2/ya-test.html) | [59](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | 0 | [104](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-03-26 18:12:29 UTC` Build successful.
:green_circle: `2025-03-26 18:12:48 UTC` ydbd size **2.2 GiB** changed* by **0 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 9b2560541424f3d688eb2bff0255822af679ca02 |merge: 6329678870f051962be32cd316a9418fd714d2ba |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 343 184 680** Bytes |**2 343 184 680** Bytes|**0 Bytes**|**0.000%**|
|ydbd stripped size|**489 990 720** Bytes|**489 990 720** Bytes|**0 Bytes**|**0.000%**|

<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/9b2560541424f3d688eb2bff0255822af679ca02..6329678870f051962be32cd316a9418fd714d2ba)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-26T16:45:28Z
body: <!-- status pr=16232, preset=release-asan, run=38426 -->
:white_circle: `2025-03-26 16:45:28 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14088778639/job/39459825199) **linux-x86_64-release-asan** for 6329678870f051962be32cd316a9418fd714d2ba has started.
:white_circle: `2025-03-26 16:46:00 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/index.html)
:white_circle: `2025-03-26 16:49:35 UTC` ya make is running...
:yellow_circle: `2025-03-26 18:06:42 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/131831) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [12403](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_1/ya-test.html) | [12329](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [32](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [9](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 18:08:07 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-26 18:21:45 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/131907) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/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/14088778639/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [109 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_2/ya-test.html) | [71](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [3](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [31](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-26 18:21:53 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-03-26 18:43:01 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/131919) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/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/14088778639/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/14088778639/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [62 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_3/ya-test.html) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [29](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14088778639/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-26 18:43:07 UTC` Build successful.
:green_circle: `2025-03-26 18:43:36 UTC` ydbd size **3.8 GiB** changed* by **-96 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 9b2560541424f3d688eb2bff0255822af679ca02 |merge: 6329678870f051962be32cd316a9418fd714d2ba |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 111 627 616** Bytes |**4 111 627 520** Bytes|**-96 Bytes**|**-0.000%**|
|ydbd stripped size|**1 420 740 360** Bytes|**1 420 740 296** Bytes|**-64 Bytes**|**-0.000%**|

<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/9b2560541424f3d688eb2bff0255822af679ca02..6329678870f051962be32cd316a9418fd714d2ba)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-28T09:04:07Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38620 -->
:white_circle: `2025-03-28 09:04:06 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14125439508/job/39573427662) **linux-x86_64-relwithdebinfo** for 34846001027c88f02b8a03960da8cf0080468141 has started.
:white_circle: `2025-03-28 09:04:21 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/index.html)
:white_circle: `2025-03-28 09:07:04 UTC` ya make is running...
:yellow_circle: `2025-03-28 10:18:04 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/132948) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [26907](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/ya-test.html) | [24248](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/ya-test.html#FAIL) | [2542](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/ya-test.html#SKIP) | [113](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 10:20:23 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-03-28 10:35:03 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/132997) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [160 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_2/ya-test.html) | [57](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | 0 | [103](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-03-28 10:35:14 UTC` Build successful.
:green_circle: `2025-03-28 10:35:36 UTC` ydbd size **2.2 GiB** changed* by **0 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 201a31f880abb8b2838ad0ccd89759e711ce59e0 |merge: 34846001027c88f02b8a03960da8cf0080468141 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 346 850 224** Bytes |**2 346 850 224** Bytes|**0 Bytes**|**0.000%**|
|ydbd stripped size|**490 750 720** Bytes|**490 750 720** Bytes|**0 Bytes**|**0.000%**|

<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/201a31f880abb8b2838ad0ccd89759e711ce59e0..34846001027c88f02b8a03960da8cf0080468141)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-28T09:04:21Z
body: <!-- status pr=16232, preset=release-asan, run=38620 -->
:white_circle: `2025-03-28 09:04:20 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14125439508/job/39573427649) **linux-x86_64-release-asan** for 34846001027c88f02b8a03960da8cf0080468141 has started.
:white_circle: `2025-03-28 09:04:34 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/index.html)
:white_circle: `2025-03-28 09:07:25 UTC` ya make is running...
:yellow_circle: `2025-03-28 10:23: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/132949) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [12394](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_1/ya-test.html) | [12217](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [111](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [31](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [35](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 10:24:50 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-28 10:40:08 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/133000) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/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/14125439508/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [234 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_2/ya-test.html) | [191](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [8](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [5](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [30](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 10:40:23 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-03-28 10:54:01 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/133009) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/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/14125439508/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/14125439508/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [65 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_3/ya-test.html) | [30](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [27](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14125439508/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-28 10:54:15 UTC` Build successful.
:green_circle: `2025-03-28 10:54:46 UTC` ydbd size **3.8 GiB** changed* by **-96 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 201a31f880abb8b2838ad0ccd89759e711ce59e0 |merge: 34846001027c88f02b8a03960da8cf0080468141 |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 118 515 528** Bytes |**4 118 515 432** Bytes|**-96 Bytes**|**-0.000%**|
|ydbd stripped size|**1 423 530 056** Bytes|**1 423 529 992** Bytes|**-64 Bytes**|**-0.000%**|

<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/201a31f880abb8b2838ad0ccd89759e711ce59e0..34846001027c88f02b8a03960da8cf0080468141)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-28T10:58:05Z
body: <!-- status pr=16232, preset=release-asan, run=38637 -->
:white_circle: `2025-03-28 10:58:05 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14127436806/job/39579583669) **linux-x86_64-release-asan** for 13af832b3a71f41e3b0820fc34d535313d69718b has started.
:white_circle: `2025-03-28 10:58:09 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/index.html)
:white_circle: `2025-03-28 11:00:52 UTC` ya make is running...
:yellow_circle: `2025-03-28 12:15:45 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/133034) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [12430](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_1/ya-test.html) | [12276](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_1/ya-test.html#PASS) | 0 | [111](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_1/ya-test.html#FAIL) | [8](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_1/ya-test.html#SKIP) | [35](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 12:17:16 UTC` ya make is running... (failed tests rerun, try 2)
:yellow_circle: `2025-03-28 12:35:05 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/133103) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/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/14127436806/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [213 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_2/ya-test.html) | [147](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_2/ya-test.html#PASS) | 0 | [33](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_2/ya-test.html#FAIL) | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_2/ya-test.html#SKIP) | [29](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_2/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 12:35:20 UTC` ya make is running... (failed tests rerun, try 3)
:yellow_circle: `2025-03-28 12:48:55 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/133129) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/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/14127436806/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/14127436806/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [93 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_3/ya-test.html) | [32](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_3/ya-test.html#PASS) | 0 | [32](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_3/ya-test.html#FAIL) | [4](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_3/ya-test.html#SKIP) | [25](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64-asan/try_3/ya-test.html#MUTE) |

:green_circle: `2025-03-28 12:49:05 UTC` Build successful.
:green_circle: `2025-03-28 12:49:41 UTC` ydbd size **3.8 GiB** changed* by **-96 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 9fb5600b9d09e19b74150cfbd128f127bdedcc84 |merge: 13af832b3a71f41e3b0820fc34d535313d69718b |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**4 119 149 616** Bytes |**4 119 149 520** Bytes|**-96 Bytes**|**-0.000%**|
|ydbd stripped size|**1 423 819 368** Bytes|**1 423 819 304** Bytes|**-64 Bytes**|**-0.000%**|

<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/9fb5600b9d09e19b74150cfbd128f127bdedcc84..13af832b3a71f41e3b0820fc34d535313d69718b)</sup>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-28T10:58:23Z
body: <!-- status pr=16232, preset=relwithdebinfo, run=38637 -->
:white_circle: `2025-03-28 10:58:23 UTC` Pre-commit [check](https://github.com/ydb-platform/ydb/actions/runs/14127436806/job/39579583646) **linux-x86_64-relwithdebinfo** for 13af832b3a71f41e3b0820fc34d535313d69718b has started.
:white_circle: `2025-03-28 10:58:39 UTC` Artifacts will be uploaded [here](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/index.html)
:white_circle: `2025-03-28 11:01:36 UTC` ya make is running...
:yellow_circle: `2025-03-28 12:09:16 UTC` Some tests failed, follow the links below. Going to retry failed tests...

<details>


[Test history](https://nebius.testmo.net/automation/runs/view/133036) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [26841](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/ya-test.html) | [24187](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/ya-test.html#PASS) | 0 | [2](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/ya-test.html#FAIL) | [2540](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/ya-test.html#SKIP) | [112](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/ya-test.html#MUTE) |

</details>

:white_circle: `2025-03-28 12:11:50 UTC` ya make is running... (failed tests rerun, try 2)
:green_circle: `2025-03-28 12:32:04 UTC` Tests successful.

[Test history](https://nebius.testmo.net/automation/runs/view/133100) | [Ya make output](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/ya_make_output.txt) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_1/test_bloat/tree_map.html) | [Test bloat](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/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> |
| ---: | ---: | ---: | ---: | ---: | ---: |
| [152 (only retried tests)](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_2/ya-test.html) | [52](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_2/ya-test.html#PASS) | 0 | 0 | 0 | [100](https://storage.yandexcloud.net/ydb-gh-logs/ydb-platform/ydb/PR-check/14127436806/ya-x86-64/try_2/ya-test.html#MUTE) |

:green_circle: `2025-03-28 12:32:14 UTC` Build successful.
:green_circle: `2025-03-28 12:32:34 UTC` ydbd size **2.2 GiB** changed* by **0 Bytes**, which is <= 0 Bytes vs main: **OK**
|[ydbd size dash](https://datalens.yandex/cu6hzmpaki700)|main: 9fb5600b9d09e19b74150cfbd128f127bdedcc84 |merge: 13af832b3a71f41e3b0820fc34d535313d69718b |diff | diff %|
|:--- | ---: | ---: | ---: | ---: |
|ydbd size|**2 347 157 296** Bytes |**2 347 157 296** Bytes|**0 Bytes**|**0.000%**|
|ydbd stripped size|**490 811 520** Bytes|**490 811 520** Bytes|**0 Bytes**|**0.000%**|

<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/9fb5600b9d09e19b74150cfbd128f127bdedcc84..13af832b3a71f41e3b0820fc34d535313d69718b)</sup>
author_association: NONE