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



##########
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:
       It should be a debug level log? If we have many partitioned topics and 
non-partitioned-topics, we will get a very long log here, maybe print the topic 
count is better?




-- 
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