Skip to content

Commit f7971e1

Browse files
authored
kesus: support in recursive rmdir (#16129)
1 parent afcf0b0 commit f7971e1

File tree

7 files changed

+30
-12
lines changed

7 files changed

+30
-12
lines changed

ydb/apps/ydb/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
* Support coordination nodes in `ydb scheme rmdir --recursive`.
12
* Fixed return code of command `ydb workload * run --check-canonical` for the case when benchmark query results differ from canonical ones.
3+
24
## 2.20.0 ##
35

46
* Added support for dual configuration mode in the `ydb admin cluster config fetch` command, allowing it to handle separate cluster and storage config sections.

ydb/public/lib/ydb_cli/commands/ydb_service_scheme.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,9 @@ int TCommandRemoveDirectory::Run(TConfig& config) {
9090
NTable::TTableClient tableClient(driver);
9191
NTopic::TTopicClient topicClient(driver);
9292
NQuery::TQueryClient queryClient(driver);
93+
NCoordination::TClient coordinationClient(driver);
9394
const auto prompt = Prompt.GetOrElse(ERecursiveRemovePrompt::Once);
94-
NStatusHelpers::ThrowOnErrorOrPrintIssues(RemoveDirectoryRecursive(schemeClient, tableClient, &topicClient, &queryClient, Path, prompt, settings));
95+
NStatusHelpers::ThrowOnErrorOrPrintIssues(RemoveDirectoryRecursive(schemeClient, tableClient, &topicClient, &queryClient, &coordinationClient, Path, prompt, settings));
9596
} else {
9697
if (Prompt) {
9798
if (!NConsoleClient::Prompt(*Prompt, Path, NScheme::ESchemeEntryType::Directory)) {

ydb/public/lib/ydb_cli/commands/ydb_workload.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ void TWorkloadCommandBase::CleanTables(NYdbWorkload::IWorkloadQueryGenerator& wo
397397
if (DryRun) {
398398
Cout << "Remove " << fullPath << Endl;
399399
} else {
400-
NStatusHelpers::ThrowOnErrorOrPrintIssues(RemovePathRecursive(*SchemeClient, *TableClient, TopicClient.Get(), QueryClient.Get(), fullPath, ERecursiveRemovePrompt::Never, settings));
400+
NStatusHelpers::ThrowOnErrorOrPrintIssues(RemovePathRecursive(*SchemeClient, *TableClient, TopicClient.Get(), QueryClient.Get(), nullptr, fullPath, ERecursiveRemovePrompt::Never, settings));
401401
}
402402
Cout << "Remove path " << path << "...Ok" << Endl;
403403
}

ydb/public/lib/ydb_cli/common/recursive_remove.cpp

+18-8
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ TStatus RemoveTopic(TTopicClient& client, const TString& path, const TDropTopicS
7070
});
7171
}
7272

73+
TStatus RemoveCoordinationNode(NCoordination::TClient& client, const TString& path, const NCoordination::TDropNodeSettings& settings) {
74+
return RetryFunction([&]() -> TStatus {
75+
return client.DropNode(path, settings).ExtractValueSync();
76+
});
77+
}
78+
7379
NYdb::NIssue::TIssues MakeIssues(const TString& error) {
7480
NYdb::NIssue::TIssues issues;
7581
issues.AddIssue(NYdb::NIssue::TIssue(error));
@@ -121,8 +127,8 @@ TStatus Remove(TRemoveFunc<TClient, TSettings> func, TSchemeClient& schemeClient
121127
}
122128

123129
TStatus Remove(
124-
TSchemeClient& schemeClient, TTableClient* tableClient, TTopicClient* topicClient, NQuery::TQueryClient* queryClient, const ESchemeEntryType type,
125-
const TString& path, ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings)
130+
TSchemeClient& schemeClient, TTableClient* tableClient, TTopicClient* topicClient, NQuery::TQueryClient* queryClient, NCoordination::TClient* coordinationClient,
131+
const ESchemeEntryType type, const TString& path, ERecursiveRemovePrompt prompt, const TRemoveDirectorySettings& settings)
126132
{
127133
switch (type) {
128134
case ESchemeEntryType::Directory:
@@ -143,6 +149,8 @@ TStatus Remove(
143149
return Remove(&RemoveExternalTable, schemeClient, tableClient, type, path, prompt, settings);
144150
case ESchemeEntryType::View:
145151
return Remove(&RemoveView, schemeClient, queryClient, type, path, prompt, settings);
152+
case ESchemeEntryType::CoordinationNode:
153+
return Remove(&RemoveCoordinationNode, schemeClient, coordinationClient, type, path, prompt, settings);
146154

147155
default:
148156
return TStatus(EStatus::UNSUPPORTED, MakeIssues(TStringBuilder()
@@ -155,6 +163,7 @@ TStatus RemoveDirectoryRecursive(
155163
TTableClient* tableClient,
156164
TTopicClient* topicClient,
157165
NQuery::TQueryClient* queryClient,
166+
NCoordination::TClient* coordinationClient,
158167
const TString& path,
159168
ERecursiveRemovePrompt prompt,
160169
const TRemoveDirectorySettings& settings,
@@ -179,7 +188,7 @@ TStatus RemoveDirectoryRecursive(
179188
// output order is: Root, Recursive(children)...
180189
// we need to reverse it to delete recursively
181190
for (auto it = recursiveListResult.Entries.rbegin(); it != recursiveListResult.Entries.rend(); ++it) {
182-
if (auto result = Remove(schemeClient, tableClient, topicClient, queryClient, it->Type, TString{it->Name}, prompt, settings); !result.IsSuccess()) {
191+
if (auto result = Remove(schemeClient, tableClient, topicClient, queryClient, coordinationClient, it->Type, TString{it->Name}, prompt, settings); !result.IsSuccess()) {
183192
return result;
184193
}
185194
if (createProgressBar) {
@@ -198,24 +207,25 @@ TStatus RemoveDirectoryRecursive(
198207
bool removeSelf,
199208
bool createProgressBar)
200209
{
201-
return RemoveDirectoryRecursive(schemeClient, &tableClient, nullptr, nullptr, path, ERecursiveRemovePrompt::Never, settings, removeSelf, createProgressBar);
210+
return RemoveDirectoryRecursive(schemeClient, &tableClient, nullptr, nullptr, nullptr, path, ERecursiveRemovePrompt::Never, settings, removeSelf, createProgressBar);
202211
}
203212

204213
TStatus RemoveDirectoryRecursive(
205214
TSchemeClient& schemeClient,
206215
TTableClient& tableClient,
207216
TTopicClient* topicClient,
208217
NQuery::TQueryClient* queryClient,
218+
NCoordination::TClient* coordinationClient,
209219
const TString& path,
210220
ERecursiveRemovePrompt prompt,
211221
const TRemoveDirectorySettings& settings,
212222
bool removeSelf,
213223
bool createProgressBar)
214224
{
215-
return RemoveDirectoryRecursive(schemeClient, &tableClient, topicClient, queryClient, path, prompt, settings, removeSelf, createProgressBar);
225+
return RemoveDirectoryRecursive(schemeClient, &tableClient, topicClient, queryClient, coordinationClient, path, prompt, settings, removeSelf, createProgressBar);
216226
}
217227

218-
NYdb::TStatus RemovePathRecursive(NScheme::TSchemeClient& schemeClient, NTable::TTableClient& tableClient, NTopic::TTopicClient* topicClient, NQuery::TQueryClient* queryClient, const TString& path, ERecursiveRemovePrompt prompt, const TRemovePathRecursiveSettings& settings /*= {}*/, bool createProgressBar /*= true*/) {
228+
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*/) {
219229
auto entity = schemeClient.DescribePath(path).ExtractValueSync();
220230
if (!entity.IsSuccess()) {
221231
if (settings.NotExistsIsOk_ && entity.GetStatus() == EStatus::SCHEME_ERROR && entity.GetIssues().ToString().find("Path not found") != TString::npos) {
@@ -226,9 +236,9 @@ NYdb::TStatus RemovePathRecursive(NScheme::TSchemeClient& schemeClient, NTable::
226236
switch (entity.GetEntry().Type) {
227237
case ESchemeEntryType::Directory:
228238
case ESchemeEntryType::ColumnStore:
229-
return RemoveDirectoryRecursive(schemeClient, tableClient, topicClient, queryClient, path, prompt, settings, true, createProgressBar);
239+
return RemoveDirectoryRecursive(schemeClient, tableClient, topicClient, queryClient, coordinationClient, path, prompt, settings, true, createProgressBar);
230240
default:
231-
return Remove(schemeClient, &tableClient, topicClient, queryClient, entity.GetEntry().Type, path, prompt, settings);
241+
return Remove(schemeClient, &tableClient, topicClient, queryClient, coordinationClient, entity.GetEntry().Type, path, prompt, settings);
232242
}
233243
}
234244
}

ydb/public/lib/ydb_cli/common/recursive_remove.h

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/coordination/coordination.h>
34
#include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/query/client.h>
45
#include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/scheme/scheme.h>
56
#include <ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h>
@@ -32,6 +33,7 @@ TStatus RemoveDirectoryRecursive(
3233
NTable::TTableClient& tableClient,
3334
NTopic::TTopicClient* topicClient,
3435
NQuery::TQueryClient* queryClient,
36+
NCoordination::TClient* coordinationClient,
3537
const TString& path,
3638
ERecursiveRemovePrompt prompt,
3739
const NScheme::TRemoveDirectorySettings& settings = {},
@@ -43,6 +45,7 @@ TStatus RemovePathRecursive(
4345
NTable::TTableClient& tableClient,
4446
NTopic::TTopicClient* topicClient,
4547
NQuery::TQueryClient* queryClient,
48+
NCoordination::TClient* coordinationClient,
4649
const TString& path,
4750
ERecursiveRemovePrompt prompt,
4851
const TRemovePathRecursiveSettings& settings = {},

ydb/public/lib/ydb_cli/dump/restore_impl.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ TRestoreResult TRestoreClient::Restore(const TString& fsPath, const TString& dbP
497497

498498
switch (entry.Type) {
499499
case ESchemeEntryType::Directory:
500-
result = RemoveDirectoryRecursive(SchemeClient, TableClient, nullptr, &QueryClient,
500+
result = RemoveDirectoryRecursive(SchemeClient, TableClient, &TopicClient, &QueryClient, &CoordinationNodeClient,
501501
TString{fullPath}, ERecursiveRemovePrompt::Never, {}, true, false);
502502
break;
503503
case ESchemeEntryType::Table:

ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/coordination/coordination.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,9 @@ struct TCreateNodeSettings : public TNodeSettings<TCreateNodeSettings> {
198198
TCreateNodeSettings(const Ydb::Coordination::Config& config);
199199
};
200200
struct TAlterNodeSettings : public TNodeSettings<TAlterNodeSettings> { };
201-
struct TDropNodeSettings : public TOperationRequestSettings<TDropNodeSettings> { };
201+
struct TDropNodeSettings : public TOperationRequestSettings<TDropNodeSettings> {
202+
using TOperationRequestSettings<TDropNodeSettings>::TOperationRequestSettings;
203+
};
202204
struct TDescribeNodeSettings : public TOperationRequestSettings<TDescribeNodeSettings> { };
203205

204206
////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)