diff options
author | brgayazov <[email protected]> | 2023-05-26 19:49:01 +0300 |
---|---|---|
committer | brgayazov <[email protected]> | 2023-05-26 19:49:01 +0300 |
commit | 5ed98ceaeb1075f189b35a0759981226cd454a02 (patch) | |
tree | 421efb69dd60423718dcacbe16e5f61e4ba2fd7a | |
parent | f84ae981531f53b5c4634fbf8340d4a185b50dde (diff) |
Added handling error "path not exist" in recursive remove
-rw-r--r-- | ydb/public/lib/ydb_cli/common/recursive_remove.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/ydb/public/lib/ydb_cli/common/recursive_remove.cpp b/ydb/public/lib/ydb_cli/common/recursive_remove.cpp index 4a6a08cb4fc..642df9a4f08 100644 --- a/ydb/public/lib/ydb_cli/common/recursive_remove.cpp +++ b/ydb/public/lib/ydb_cli/common/recursive_remove.cpp @@ -71,7 +71,7 @@ template <typename TClient, typename TSettings> using TRemoveFunc = TStatus(*)(TClient&, const TString&, const TSettings&); template <typename TClient, typename TSettings> -TStatus Remove(TRemoveFunc<TClient, TSettings> func, TClient* client, const TSchemeEntry& entry, +TStatus Remove(TRemoveFunc<TClient, TSettings> func, TSchemeClient& schemeClient, TClient* client, const TSchemeEntry& entry, ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings) { if (!client) { @@ -80,7 +80,12 @@ TStatus Remove(TRemoveFunc<TClient, TSettings> func, TClient* client, const TSch } if (Prompt(prompt, entry.Name, entry.Type, false)) { - return func(*client, entry.Name, TSettings(settings)); + auto status = func(*client, entry.Name, TSettings(settings)); + if (status.GetStatus() == EStatus::SCHEME_ERROR && schemeClient.DescribePath(entry.Name).ExtractValueSync().GetStatus() == EStatus::SCHEME_ERROR) { + Cerr << "WARNING: Couldn't delete path: \'" << entry.Name << "\'. It was probably already deleted in another process" << Endl; + return TStatus(EStatus::SUCCESS, {}); + } + return status; } else { return TStatus(EStatus::SUCCESS, {}); } @@ -112,26 +117,26 @@ TStatus RemoveDirectoryRecursive( const auto& entry = *it; switch (entry.Type) { case ESchemeEntryType::Directory: - if (auto result = Remove(&RemoveDirectory, &schemeClient, entry, prompt, settings); !result.IsSuccess()) { + if (auto result = Remove(&RemoveDirectory, schemeClient, &schemeClient, entry, prompt, settings); !result.IsSuccess()) { return result; } break; case ESchemeEntryType::ColumnStore: - if (auto result = Remove(&RemoveColumnStore, tableClient, entry, prompt, settings); !result.IsSuccess()) { + if (auto result = Remove(&RemoveColumnStore, schemeClient, tableClient, entry, prompt, settings); !result.IsSuccess()) { return result; } break; case ESchemeEntryType::ColumnTable: case ESchemeEntryType::Table: - if (auto result = Remove(&RemoveTable, tableClient, entry, prompt, settings); !result.IsSuccess()) { + if (auto result = Remove(&RemoveTable, schemeClient, tableClient, entry, prompt, settings); !result.IsSuccess()) { return result; } break; case ESchemeEntryType::Topic: - if (auto result = Remove(&RemoveTopic, topicClient, entry, prompt, settings); !result.IsSuccess()) { + if (auto result = Remove(&RemoveTopic, schemeClient, topicClient, entry, prompt, settings); !result.IsSuccess()) { return result; } break; |