Skip to content

Commit

Permalink
KIKIMR-19671 Add RemovePathRecursive function (#680)
Browse files Browse the repository at this point in the history
* KIKIMR-19671 add RemovePathRecursive function

* fix style
  • Loading branch information
iddqdex authored Dec 26, 2023
1 parent 6dc434a commit 9c84445
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 30 deletions.
69 changes: 39 additions & 30 deletions ydb/public/lib/ydb_cli/common/recursive_remove.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,30 @@ TStatus Remove(TRemoveFunc<TClient, TSettings> func, TSchemeClient& schemeClient
}
}

TStatus Remove(
TSchemeClient& schemeClient, TTableClient* tableClient, TTopicClient* topicClient, const TSchemeEntry& entry,
ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings)
{
switch (entry.Type) {
case ESchemeEntryType::Directory:
return Remove(&RemoveDirectory, schemeClient, &schemeClient, entry, prompt, settings);

case ESchemeEntryType::ColumnStore:
return Remove(&RemoveColumnStore, schemeClient, tableClient, entry, prompt, settings);

case ESchemeEntryType::ColumnTable:
case ESchemeEntryType::Table:
return Remove(&RemoveTable, schemeClient, tableClient, entry, prompt, settings);

case ESchemeEntryType::Topic:
return Remove(&RemoveTopic, schemeClient, topicClient, entry, prompt, settings);

default:
return TStatus(EStatus::UNSUPPORTED, MakeIssues(TStringBuilder()
<< "Unsupported entry type: " << entry.Type));
}
}

TStatus RemoveDirectoryRecursive(
TSchemeClient& schemeClient,
TTableClient* tableClient,
Expand Down Expand Up @@ -120,36 +144,8 @@ TStatus RemoveDirectoryRecursive(
// 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) {
const auto& entry = *it;
switch (entry.Type) {
case ESchemeEntryType::Directory:
if (auto result = Remove(&RemoveDirectory, schemeClient, &schemeClient, entry, prompt, settings); !result.IsSuccess()) {
return result;
}
break;

case ESchemeEntryType::ColumnStore:
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, schemeClient, tableClient, entry, prompt, settings); !result.IsSuccess()) {
return result;
}
break;

case ESchemeEntryType::Topic:
if (auto result = Remove(&RemoveTopic, schemeClient, topicClient, entry, prompt, settings); !result.IsSuccess()) {
return result;
}
break;

default:
return TStatus(EStatus::UNSUPPORTED, MakeIssues(TStringBuilder()
<< "Unsupported entry type: " << entry.Type));
if (auto result = Remove(schemeClient, tableClient, topicClient, *it, prompt, settings); !result.IsSuccess()) {
return result;
}
if (createProgressBar) {
bar->AddProgress(1);
Expand Down Expand Up @@ -183,4 +179,17 @@ TStatus RemoveDirectoryRecursive(
return RemoveDirectoryRecursive(schemeClient, &tableClient, &topicClient, path, prompt, settings, removeSelf, createProgressBar);
}

NYdb::TStatus RemovePathRecursive(NScheme::TSchemeClient& schemeClient, NTable::TTableClient& tableClient, NTopic::TTopicClient& topicClient, const TString& path, ERecursiveRemovePrompt prompt, const NScheme::TRemoveDirectorySettings& settings /*= {}*/, bool createProgressBar /*= true*/) {
auto entity = schemeClient.DescribePath(path).ExtractValueSync();
if (!entity.IsSuccess()) {
return entity;
}
switch (entity.GetEntry().Type) {
case ESchemeEntryType::Directory:
case ESchemeEntryType::ColumnStore:
return RemoveDirectoryRecursive(schemeClient, tableClient, topicClient, path, prompt, settings, true, createProgressBar);
default:
return Remove(schemeClient, &tableClient, &topicClient, entity.GetEntry(), prompt, settings);
}
}
}
9 changes: 9 additions & 0 deletions ydb/public/lib/ydb_cli/common/recursive_remove.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,13 @@ TStatus RemoveDirectoryRecursive(
bool removeSelf = true,
bool createProgressBar = true);

TStatus RemovePathRecursive(
NScheme::TSchemeClient& schemeClient,
NTable::TTableClient& tableClient,
NTopic::TTopicClient& topicClient,
const TString& path,
ERecursiveRemovePrompt prompt,
const NScheme::TRemoveDirectorySettings& settings = {},
bool createProgressBar = true);

}

0 comments on commit 9c84445

Please sign in to comment.