This is an automated email from the ASF dual-hosted git repository.
bogong pushed a commit to branch branch-2.9
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.9 by this push:
new 2e04ba69ca7 Fix zk-node leak of admin path (#12972)
2e04ba69ca7 is described below
commit 2e04ba69ca7cdda86a6cd9608de7fa98c8f2d930
Author: xiaolong ran <[email protected]>
AuthorDate: Mon Nov 29 16:30:44 2021 +0800
Fix zk-node leak of admin path (#12972)
Signed-off-by: xiaolongran <[email protected]>
Fixes #12968
When we run follow command:
```
bin/pulsar-admin tenants delete test2
```
the zk-node of `/admin/partitioned-topics` and `/admin/local-policies` wil
not remove, casued by zk-node leak.
- clear tenant zk-node of `/admin/partitioned-topics/`
- clear tenant zk-node of `/admin/local-policies/`
- add test case
(cherry picked from commit 86fe7d2c367deb4f9a4d98ab08f9372ba5f5ac5f)
---
.../pulsar/broker/resources/LocalPoliciesResources.java | 16 ++++++++++++++++
.../pulsar/broker/resources/NamespaceResources.java | 15 +++++++++++++++
.../org/apache/pulsar/broker/admin/impl/TenantsBase.java | 4 ++++
.../org/apache/pulsar/broker/admin/AdminApi2Test.java | 4 ++++
4 files changed, 39 insertions(+)
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/LocalPoliciesResources.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/LocalPoliciesResources.java
index 29a6a4666e2..032991fceac 100644
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/LocalPoliciesResources.java
+++
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/LocalPoliciesResources.java
@@ -30,6 +30,7 @@ import org.apache.pulsar.metadata.api.CacheGetResult;
import org.apache.pulsar.metadata.api.GetResult;
import org.apache.pulsar.metadata.api.MetadataStore;
import org.apache.pulsar.metadata.api.MetadataStoreException;
+import org.apache.zookeeper.KeeperException;
public class LocalPoliciesResources extends BaseResources<LocalPolicies> {
@@ -83,6 +84,21 @@ public class LocalPoliciesResources extends
BaseResources<LocalPolicies> {
return deleteAsync(joinPath(LOCAL_POLICIES_ROOT, ns.toString()));
}
+ public CompletableFuture<Void> deleteLocalPoliciesTenantAsync(String
tenant) {
+ final String localPoliciesPath = joinPath(LOCAL_POLICIES_ROOT, tenant);
+ CompletableFuture<Void> future = new CompletableFuture<Void>();
+ deleteAsync(localPoliciesPath).whenComplete((ignore, ex) -> {
+ if (ex != null && ex.getCause().getCause() instanceof
KeeperException) {
+ future.complete(null);
+ } else if (ex != null) {
+ future.completeExceptionally(ex);
+ } else {
+ future.complete(null);
+ }
+ });
+ return future;
+ }
+
public static boolean isLocalPoliciesPath(String path) {
return path.startsWith(LOCAL_POLICIES_ROOT);
}
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
index 8f677f069d5..dd958d07893 100644
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
+++
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/NamespaceResources.java
@@ -280,6 +280,21 @@ public class NamespaceResources extends
BaseResources<Policies> {
return completableFuture;
}
+
+ public CompletableFuture<Void> clearPartitionedTopicTenantAsync(String
tenant) {
+ final String partitionedTopicPath =
joinPath(PARTITIONED_TOPIC_PATH, tenant);
+ CompletableFuture<Void> future = new CompletableFuture<Void>();
+ deleteAsync(partitionedTopicPath).whenComplete((ignore, ex) -> {
+ if (ex != null && ex.getCause().getCause() instanceof
KeeperException.NoNodeException) {
+ future.complete(null);
+ } else if (ex != null) {
+ future.completeExceptionally(ex);
+ } else {
+ future.complete(null);
+ }
+ });
+ return future;
+ }
}
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
index 29b46990ca4..5bd9dc8bd0f 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
@@ -264,6 +264,10 @@ public class TenantsBase extends PulsarWebResource {
.clearTenantPersistence(tenant))
.thenCompose(ignore ->
pulsar().getPulsarResources().getNamespaceResources()
.deleteTenantAsync(tenant))
+ .thenCompose(ignore ->
pulsar().getPulsarResources().getNamespaceResources()
+
.getPartitionedTopicResources().clearPartitionedTopicTenantAsync(tenant))
+ .thenCompose(ignore ->
pulsar().getPulsarResources().getLocalPolicies()
+ .deleteLocalPoliciesTenantAsync(tenant))
.thenCompose(ignore ->
pulsar().getPulsarResources().getNamespaceResources()
.deleteBundleDataTenantAsync(tenant))
.whenComplete((ignore, ex) -> {
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
index e0fac522f27..8bc72d40d97 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
@@ -1313,8 +1313,12 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
final String managedLedgersPath = "/managed-ledgers/" + tenant;
final String bundleDataPath = "/loadbalance/bundle-data/" + tenant;
+ final String partitionedTopicPath = "/admin/partitioned-topics/" +
tenant;
+ final String localPoliciesPath = "/admin/local-policies/" + tenant;
assertFalse(pulsar.getLocalMetadataStore().exists(managedLedgersPath).join());
assertFalse(pulsar.getLocalMetadataStore().exists(bundleDataPath).join());
+
assertFalse(pulsar.getLocalMetadataStore().exists(partitionedTopicPath).join());
+
assertFalse(pulsar.getLocalMetadataStore().exists(localPoliciesPath).join());
}
@Test