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));
+ }
}