summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrgayazov <[email protected]>2023-05-26 19:49:01 +0300
committerbrgayazov <[email protected]>2023-05-26 19:49:01 +0300
commit5ed98ceaeb1075f189b35a0759981226cd454a02 (patch)
tree421efb69dd60423718dcacbe16e5f61e4ba2fd7a
parentf84ae981531f53b5c4634fbf8340d4a185b50dde (diff)
Added handling error "path not exist" in recursive remove
-rw-r--r--ydb/public/lib/ydb_cli/common/recursive_remove.cpp17
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;