You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by zh...@apache.org on 2020/05/08 12:33:51 UTC

[pulsar] 05/38: Fixed double delete on a namespace (#6713)

This is an automated email from the ASF dual-hosted git repository.

zhaijia pushed a commit to branch branch-2.5
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 40b6c916bd891ffdcde407d834ecf714cd5bc6e3
Author: Matteo Merli <mm...@apache.org>
AuthorDate: Tue Apr 14 08:46:06 2020 -0700

    Fixed double delete on a namespace (#6713)
    
    (cherry picked from commit 88f401c534f597ce8b66939d1490974bfde60441)
---
 .../apache/pulsar/broker/admin/impl/NamespacesBase.java |  9 ++++++++-
 .../org/apache/pulsar/broker/admin/AdminApiTest.java    | 17 +++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
index 638d397..619a5cd 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
@@ -90,6 +90,7 @@ import org.apache.pulsar.common.policies.data.SubscriptionAuthMode;
 import org.apache.pulsar.common.util.FutureUtil;
 import org.apache.pulsar.common.util.ObjectMapperFactory;
 import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.KeeperException.NoNodeException;
 import org.apache.zookeeper.data.Stat;
 
 import org.slf4j.Logger;
@@ -257,7 +258,13 @@ public abstract class NamespacesBase extends AdminResource {
                 final String globalZkPolicyPath = path(POLICIES, namespaceName.toString());
                 final String lcaolZkPolicyPath = joinPath(LOCAL_POLICIES_ROOT, namespaceName.toString());
                 globalZk().delete(globalZkPolicyPath, -1);
-                localZk().delete(lcaolZkPolicyPath, -1);
+
+                try {
+                    localZk().delete(lcaolZkPolicyPath, -1);
+                } catch (NoNodeException nne) {
+                    // If the z-node with the modified information is not there anymore, we're already good
+                }
+
                 policiesCache().invalidate(globalZkPolicyPath);
                 localCacheService().policiesCache().invalidate(lcaolZkPolicyPath);
             } catch (Exception e) {
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index ae98235..0ab6311 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -2253,6 +2253,23 @@ public class AdminApiTest extends MockedPulsarServiceBaseTest {
     }
 
     @Test
+    public void testCreateAndDeleteNamespaceWithBundles() throws Exception {
+        admin.clusters().createCluster("usw", new ClusterData());
+        TenantInfo tenantInfo = new TenantInfo(Sets.newHashSet("role1", "role2"),
+                Sets.newHashSet("test", "usw"));
+        admin.tenants().updateTenant("prop-xyz", tenantInfo);
+
+        String ns = "prop-xyz/ns-" + System.nanoTime();
+
+        admin.namespaces().createNamespace(ns, 24);
+        admin.namespaces().deleteNamespace(ns);
+
+        // Re-create and re-delete
+        admin.namespaces().createNamespace(ns, 32);
+        admin.namespaces().deleteNamespace(ns);
+    }
+
+    @Test
     public void testBacklogSizeShouldBeZeroWhenConsumerAckedAllMessages() throws Exception {
         final String topic = "persistent://prop-xyz/ns1/testBacklogSizeShouldBeZeroWhenConsumerAckedAllMessages";
         Consumer<byte[]> consumer = pulsarClient.newConsumer()