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

technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new a3bca685a4e [improve][admin] Remove duplicate topics name when 
`deleteNamespace` (#20683)
a3bca685a4e is described below

commit a3bca685a4ef0916462228e035f77fdbf295653d
Author: Jiwei Guo <[email protected]>
AuthorDate: Tue Jul 4 16:18:41 2023 +0800

    [improve][admin] Remove duplicate topics name when `deleteNamespace` 
(#20683)
---
 .../pulsar/broker/admin/impl/NamespacesBase.java   | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 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 ff87f52b64a..789a8e6dbdc 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
@@ -233,14 +233,14 @@ public abstract class NamespacesBase extends 
AdminResource {
                                     }))
                             .thenCompose(topics -> {
                                 List<String> allTopics = topics.get(0);
-                                ArrayList<String> allUserCreatedTopics = new 
ArrayList<>();
+                                Set<String> allUserCreatedTopics = new 
HashSet<>();
                                 List<String> allPartitionedTopics = 
topics.get(1);
-                                ArrayList<String> 
allUserCreatedPartitionTopics = new ArrayList<>();
+                                Set<String> allUserCreatedPartitionTopics = 
new HashSet<>();
                                 boolean hasNonSystemTopic = false;
-                                List<String> allSystemTopics = new 
ArrayList<>();
-                                List<String> allPartitionedSystemTopics = new 
ArrayList<>();
-                                List<String> topicPolicy = new ArrayList<>();
-                                List<String> partitionedTopicPolicy = new 
ArrayList<>();
+                                Set<String> allSystemTopics = new HashSet<>();
+                                Set<String> allPartitionedSystemTopics = new 
HashSet<>();
+                                Set<String> topicPolicy = new HashSet<>();
+                                Set<String> partitionedTopicPolicy = new 
HashSet<>();
                                 for (String topic : allTopics) {
                                     if 
(!pulsar().getBrokerService().isSystemTopic(TopicName.get(topic))) {
                                         hasNonSystemTopic = true;
@@ -279,6 +279,12 @@ public abstract class NamespacesBase extends AdminResource 
{
                                         return old;
                                     });
                                 }
+                                allUserCreatedTopics.removeIf(t ->
+                                        
allPartitionedTopics.contains(TopicName.get(t).getPartitionedTopicName()));
+                                allSystemTopics.removeIf(t ->
+                                        
allPartitionedTopics.contains(TopicName.get(t).getPartitionedTopicName()));
+                                topicPolicy.removeIf(t ->
+                                        
allPartitionedTopics.contains(TopicName.get(t).getPartitionedTopicName()));
                                 return markDeleteFuture.thenCompose(__ ->
                                                 
internalDeleteTopicsAsync(allUserCreatedTopics))
                                         .thenCompose(ignore ->
@@ -348,7 +354,7 @@ public abstract class NamespacesBase extends AdminResource {
         return topic.endsWith(SystemTopicNames.PENDING_ACK_STORE_SUFFIX);
     }
 
-    private CompletableFuture<Void> 
internalDeletePartitionedTopicsAsync(List<String> topicNames) {
+    private CompletableFuture<Void> 
internalDeletePartitionedTopicsAsync(Set<String> topicNames) {
         if (CollectionUtils.isEmpty(topicNames)) {
             return CompletableFuture.completedFuture(null);
         }
@@ -362,7 +368,7 @@ public abstract class NamespacesBase extends AdminResource {
         return FutureUtil.waitForAll(futures);
     }
 
-    private CompletableFuture<Void> internalDeleteTopicsAsync(List<String> 
topicNames) {
+    private CompletableFuture<Void> internalDeleteTopicsAsync(Set<String> 
topicNames) {
         if (CollectionUtils.isEmpty(topicNames)) {
             return CompletableFuture.completedFuture(null);
         }

Reply via email to