Skip to content

Commit 61ce6cb

Browse files
Backport ClickHouse#86554 to 25.8: Check feature flag when adding RemoveRecursive request to Multi
1 parent 7528177 commit 61ce6cb

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

src/Common/ZooKeeper/Types.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ using AsyncResponses = std::vector<std::pair<std::string, std::future<R>>>;
3030

3131
Coordination::RequestPtr makeCreateRequest(const std::string & path, const std::string & data, int create_mode, bool ignore_if_exists = false);
3232
Coordination::RequestPtr makeRemoveRequest(const std::string & path, int version);
33-
Coordination::RequestPtr makeRemoveRecursiveRequest(const std::string & path, uint32_t remove_nodes_limit);
3433
Coordination::RequestPtr makeSetRequest(const std::string & path, const std::string & data, int version);
3534
Coordination::RequestPtr makeCheckRequest(const std::string & path, int version);
3635
Coordination::RequestPtr makeGetRequest(const std::string & path, Coordination::WatchCallbackPtr watch = nullptr);
3736
Coordination::RequestPtr makeListRequest(const std::string & path, Coordination::ListRequestType list_request_type = Coordination::ListRequestType::ALL, Coordination::WatchCallbackPtr watch = nullptr);
3837
Coordination::RequestPtr makeSimpleListRequest(const std::string & path, Coordination::WatchCallbackPtr watch = nullptr);
3938
Coordination::RequestPtr makeExistsRequest(const std::string & path, Coordination::WatchCallbackPtr watch = nullptr);
4039

40+
template <class Client>
41+
Coordination::RequestPtr makeRemoveRecursiveRequest(const Client & client, const std::string & path, uint32_t remove_nodes_limit);
42+
4143
}

src/Common/ZooKeeper/ZooKeeper.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1727,14 +1727,21 @@ Coordination::RequestPtr makeRemoveRequest(const std::string & path, int version
17271727
return request;
17281728
}
17291729

1730-
Coordination::RequestPtr makeRemoveRecursiveRequest(const std::string & path, uint32_t remove_nodes_limit)
1730+
template <class Client>
1731+
Coordination::RequestPtr makeRemoveRecursiveRequest(const Client & client, const std::string & path, uint32_t remove_nodes_limit)
17311732
{
1733+
if (!client.isFeatureEnabled(DB::KeeperFeatureFlag::REMOVE_RECURSIVE))
1734+
throw DB::Exception(DB::ErrorCodes::LOGICAL_ERROR, "Trying to use RemoveRecursive request while Keeper doesn't support it or feature flag is disabled");
1735+
17321736
auto request = std::make_shared<Coordination::ZooKeeperRemoveRecursiveRequest>();
17331737
request->path = path;
17341738
request->remove_nodes_limit = remove_nodes_limit;
17351739
return request;
17361740
}
17371741

1742+
template Coordination::RequestPtr makeRemoveRecursiveRequest<zkutil::ZooKeeper>(const zkutil::ZooKeeper & client, const std::string & path, uint32_t remove_nodes_limit);
1743+
template Coordination::RequestPtr makeRemoveRecursiveRequest<DB::ZooKeeperWithFaultInjection>(const DB::ZooKeeperWithFaultInjection & client, const std::string & path, uint32_t remove_nodes_limit);
1744+
17381745
Coordination::RequestPtr makeSetRequest(const std::string & path, const std::string & data, int version)
17391746
{
17401747
auto request = std::make_shared<Coordination::ZooKeeperSetRequest>();

src/Coordination/tests/gtest_coordination_storage.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,17 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveRequest)
367367
}
368368
}
369369

370+
namespace
371+
{
372+
Coordination::RequestPtr makeRemoveRecursiveRequest(const std::string & path, uint32_t remove_nodes_limit)
373+
{
374+
auto request = std::make_shared<Coordination::ZooKeeperRemoveRecursiveRequest>();
375+
request->path = path;
376+
request->remove_nodes_limit = remove_nodes_limit;
377+
return request;
378+
}
379+
}
380+
370381
TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
371382
{
372383
using namespace DB;
@@ -436,7 +447,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
436447
int new_zxid = ++zxid;
437448
auto ops = prepare_create_tree();
438449

439-
ops.push_back(zkutil::makeRemoveRecursiveRequest("/A", 4));
450+
ops.push_back(makeRemoveRecursiveRequest("/A", 4));
440451
const auto request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
441452

442453
storage.preprocessRequest(request, 1, 0, new_zxid);
@@ -457,7 +468,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
457468
auto ops = prepare_create_tree();
458469

459470
ops.push_back(zkutil::makeRemoveRequest("/A/C", -1));
460-
ops.push_back(zkutil::makeRemoveRecursiveRequest("/A", 3));
471+
ops.push_back(makeRemoveRecursiveRequest("/A", 3));
461472
const auto request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
462473

463474
storage.preprocessRequest(request, 1, 0, new_zxid);
@@ -497,7 +508,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
497508
int remove_zxid = ++zxid;
498509
ops = {
499510
zkutil::makeRemoveRequest("/A/C", -1),
500-
zkutil::makeRemoveRecursiveRequest("/A", 3),
511+
makeRemoveRecursiveRequest("/A", 3),
501512
};
502513
const auto remove_request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
503514

@@ -528,7 +539,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
528539
int remove_zxid = ++zxid;
529540
ops = {
530541
zkutil::makeSetRequest("/A/B", "", -1),
531-
zkutil::makeRemoveRecursiveRequest("/A", 3),
542+
makeRemoveRecursiveRequest("/A", 3),
532543
};
533544
auto remove_request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
534545
storage.preprocessRequest(remove_request, 1, 0, remove_zxid);
@@ -539,7 +550,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
539550

540551
/// Big limit
541552
remove_zxid = ++zxid;
542-
ops[1] = zkutil::makeRemoveRecursiveRequest("/A", 4);
553+
ops[1] = makeRemoveRecursiveRequest("/A", 4);
543554
remove_request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
544555
storage.preprocessRequest(remove_request, 1, 0, remove_zxid);
545556
remove_responses = storage.processRequest(remove_request, 1, remove_zxid);
@@ -562,7 +573,7 @@ TYPED_TEST(CoordinationTest, TestRemoveRecursiveInMultiRequest)
562573
zkutil::makeCreateRequest("/A", "", zkutil::CreateMode::Persistent),
563574
zkutil::makeCreateRequest("/A/B", "", zkutil::CreateMode::Persistent),
564575
zkutil::makeCreateRequest("/A/CCCCCCCCCCCC", "", zkutil::CreateMode::Persistent),
565-
zkutil::makeRemoveRecursiveRequest("/A", 3),
576+
makeRemoveRecursiveRequest("/A", 3),
566577
};
567578
auto remove_request = std::make_shared<ZooKeeperMultiRequest>(ops, ACLs{});
568579
storage.preprocessRequest(remove_request, 1, 0, new_zxid);

src/Storages/ObjectStorageQueue/ObjectStorageQueueMetadata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ void ObjectStorageQueueMetadata::unregisterNonActive(const StorageID & storage_i
771771
if (supports_remove_recursive)
772772
{
773773
requests.push_back(zkutil::makeCheckRequest(registry_path, stat.version));
774-
requests.push_back(zkutil::makeRemoveRecursiveRequest(zookeeper_path, std::numeric_limits<uint32_t>::max()));
774+
requests.push_back(zkutil::makeRemoveRecursiveRequest(*zk_client, zookeeper_path, std::numeric_limits<uint32_t>::max()));
775775
}
776776
else
777777
{

0 commit comments

Comments
 (0)