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

xiangying 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 ef1a6e7f34c [improve][admin] Unset namespace policy to improve 
deleting namespace. (#17033)
ef1a6e7f34c is described below

commit ef1a6e7f34c65926e1bffe012591ebc4a4251823
Author: Jiwei Guo <[email protected]>
AuthorDate: Sun Aug 14 18:17:49 2022 +0800

    [improve][admin] Unset namespace policy to improve deleting namespace. 
(#17033)
    
    (cherry picked from commit 70020f14c3959f232ae53816022268fc61e0f955)
---
 .../apache/pulsar/broker/admin/impl/NamespacesBase.java  | 16 +++++++++-------
 .../org/apache/pulsar/broker/admin/AdminApi2Test.java    | 12 ++++++++++++
 2 files changed, 21 insertions(+), 7 deletions(-)

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 358085cb3e1..a4e20dd138f 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
@@ -298,9 +298,9 @@ public abstract class NamespacesBase extends AdminResource {
                 TopicName topicName = TopicName.get(topic);
                 if (topicName.isPartitioned()) {
                     if (isTopicPoliciesSystemTopic(topic)) {
-                        partitionedTopicPolicy.add(topic);
+                        
partitionedTopicPolicy.add(topicName.getPartitionedTopicName());
                     } else {
-                        allPartitionedSystemTopics.add(topic);
+                        
allPartitionedSystemTopics.add(topicName.getPartitionedTopicName());
                     }
                 } else {
                     if (isTopicPoliciesSystemTopic(topic)) {
@@ -506,9 +506,6 @@ public abstract class NamespacesBase extends AdminResource {
                             }
                             String partitionedTopic = 
topicName.getPartitionedTopicName();
                             if (!partitionedTopics.contains(partitionedTopic)) 
{
-                                // Distinguish partitioned topic to avoid 
duplicate deletion of the same schema
-                                
topicFutures.add(pulsar().getAdminClient().topics().deletePartitionedTopicAsync(
-                                        partitionedTopic, true, true));
                                 partitionedTopics.add(partitionedTopic);
                             }
                         } else {
@@ -520,10 +517,10 @@ public abstract class NamespacesBase extends 
AdminResource {
                                 }
                                 continue;
                             }
-                            
topicFutures.add(pulsar().getAdminClient().topics().deleteAsync(
-                                    topic, true, true));
                             nonPartitionedTopics.add(topic);
                         }
+                        
topicFutures.add(pulsar().getAdminClient().topics().deleteAsync(
+                                topic, true, true));
                     } catch (Exception e) {
                         String errorMessage = String.format("Failed to force 
delete topic %s, "
                                         + "but the previous deletion command 
of partitioned-topics:%s "
@@ -536,6 +533,11 @@ public abstract class NamespacesBase extends AdminResource 
{
                     }
                 }
 
+                for (String partitionedTopic : partitionedTopics) {
+                    
topicFutures.add(namespaceResources().getPartitionedTopicResources()
+                            
.deletePartitionedTopicAsync(TopicName.get(partitionedTopic)));
+                }
+
                 if (log.isDebugEnabled()) {
                     log.debug("Successfully send deletion command of 
partitioned-topics:{} "
                                     + "and non-partitioned-topics:{} in 
namespace:{}.",
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 9f6a10894c9..9db6380dba0 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
@@ -118,6 +118,7 @@ public class AdminApi2Test extends 
MockedPulsarServiceBaseTest {
     @BeforeMethod
     @Override
     public void setup() throws Exception {
+        conf.setForceDeleteNamespaceAllowed(true);
         conf.setLoadBalancerEnabled(true);
         conf.setEnableNamespaceIsolationUpdateOnTime(true);
         super.internalSetup();
@@ -2401,4 +2402,15 @@ public class AdminApi2Test extends 
MockedPulsarServiceBaseTest {
         // validate subscription is created for new partition.
         assertNotNull(admin.topics().getStats(partitionedTopicName + 
"-partition-" + 6).getSubscriptions().get(subName1));
     }
+
+    @Test
+    private void testDeleteNamespaceForciblyWithManyTopics() throws Exception {
+        final String ns = 
"prop-xyz/ns-testDeleteNamespaceForciblyWithManyTopics";
+        admin.namespaces().createNamespace(ns, 2);
+        for (int i = 0; i < 100; i++) {
+            
admin.topics().createPartitionedTopic(String.format("persistent://%s", ns + 
"/topic" + i), 3);
+        }
+        admin.namespaces().deleteNamespace(ns, true);
+        
Assert.assertFalse(admin.namespaces().getNamespaces("prop-xyz").contains(ns));
+    }
 }

Reply via email to