wuzhanpeng commented on a change in pull request #11640:
URL: https://github.com/apache/pulsar/pull/11640#discussion_r692691233



##########
File path: 
pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java
##########
@@ -415,14 +415,40 @@ protected void 
internalDeleteNamespaceForcefully(AsyncResponse asyncResponse, bo
         try {
             // firstly remove all topics including system topics
             if (!topics.isEmpty()) {
+                Set<String> partitionedTopics = new HashSet<>();
+                Set<String> nonPartitionedTopics = new HashSet<>();
+
                 for (String topic : topics) {
                     try {
-                        
futures.add(pulsar().getAdminClient().topics().deleteAsync(topic, true, true));
+                        TopicName topicName = TopicName.get(topic);
+                        if (topicName.isPartitioned()) {
+                            String partitionedTopic = 
topicName.getPartitionedTopicName();
+                            if (!partitionedTopics.contains(partitionedTopic)) 
{
+                                // Distinguish partitioned topic to avoid 
duplicate deletion of the same schema
+                                
futures.add(pulsar().getAdminClient().topics().deletePartitionedTopicAsync(
+                                        partitionedTopic, true, true));
+                                partitionedTopics.add(partitionedTopic);
+                            }
+                        } else {
+                            
futures.add(pulsar().getAdminClient().topics().deleteAsync(
+                                    topic, true, true));
+                            nonPartitionedTopics.add(topic);
+                        }
                     } catch (Exception e) {
-                        log.error("[{}] Failed to force delete topic {}", 
clientAppId(), topic, e);
-                        asyncResponse.resume(new RestException(e));
+                        String errorMessage = String.format("Failed to force 
delete topic %s, "
+                                        + "but the previous deletion command 
of partitioned-topics:%s "
+                                        + "and non-partitioned-topics:%s have 
been sent out asynchronously. "
+                                        + "Reason: %s",
+                                topic, partitionedTopics, 
nonPartitionedTopics, e.getCause());
+                        log.error("[{}] {}", clientAppId(), errorMessage, e);
+                        asyncResponse.resume(new 
RestException(Status.INTERNAL_SERVER_ERROR, errorMessage));
+                        return;
                     }
                 }
+
+                log.info("Successfully send deletion command of 
partitioned-topics:{} "

Review comment:
       Thanks for your suggestion! I have addressed the comment. PTAL~ 
@codelipenghui 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to