From e8bd0e17bf63c0c2c951b3d7eadb5b6b0f89cf5c Mon Sep 17 00:00:00 2001 From: fengyubiao Date: Mon, 29 Aug 2022 23:04:34 +0800 Subject: [PATCH] [fix][broker]delete namespace fail when has partitioned system topic --- .../pulsar/broker/admin/AdminApi2Test.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) 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 92eac8342f4be..a619bab272e54 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 @@ -51,7 +51,9 @@ import java.util.concurrent.TimeUnit; import javax.ws.rs.NotAcceptableException; import javax.ws.rs.core.Response.Status; +import lombok.AllArgsConstructor; import lombok.Cleanup; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.mledger.ManagedLedger; import org.apache.bookkeeper.mledger.impl.ManagedCursorImpl; @@ -1500,9 +1502,43 @@ public void testDeleteTenant() throws Exception { } } - @Test - public void testDeleteNamespace() throws Exception { - pulsar.getConfiguration().setForceDeleteNamespaceAllowed(false); + @Data + @AllArgsConstructor + private static class NamespaceAttr { + private boolean systemTopicEnabled; + private String autoTopicCreationType; + private int defaultNumPartitions; + private boolean forceDeleteNamespaceAllowed; + } + + @DataProvider(name = "namespaceAttrs") + public Object[][] namespaceAttributes(){ + return new Object[][]{ + {new NamespaceAttr(false, "non-partitioned", 0, false)}, + {new NamespaceAttr(true, "non-partitioned", 0, false)}, + {new NamespaceAttr(true, "partitioned", 3, false)} + }; + } + + private NamespaceAttr markOriginalNamespaceAttr(){ + return new NamespaceAttr(conf.isSystemTopicEnabled(), conf.getAllowAutoTopicCreationType(), + conf.getDefaultNumPartitions(), conf.isForceDeleteNamespaceAllowed()); + } + + private void setNamespaceAttr(NamespaceAttr namespaceAttr){ + conf.setSystemTopicEnabled(namespaceAttr.systemTopicEnabled); + conf.setAllowAutoTopicCreationType(namespaceAttr.autoTopicCreationType); + conf.setDefaultNumPartitions(namespaceAttr.defaultNumPartitions); + conf.setForceDeleteNamespaceAllowed(namespaceAttr.forceDeleteNamespaceAllowed); + } + + @Test(dataProvider = "namespaceAttrs") + public void testDeleteNamespace(NamespaceAttr namespaceAttr) throws Exception { + // Set conf. + internalCleanup(); + NamespaceAttr originalNamespaceAttr = markOriginalNamespaceAttr(); + setNamespaceAttr(namespaceAttr); + setup(); String tenant = "test-tenant"; assertFalse(admin.tenants().getTenants().contains(tenant)); @@ -1548,6 +1584,11 @@ public void testDeleteNamespace() throws Exception { final String bundleDataPath = "/loadbalance/bundle-data/" + namespace; assertFalse(pulsar.getLocalMetadataStore().exists(bundleDataPath).join()); + + // Reset config + internalCleanup(); + setNamespaceAttr(originalNamespaceAttr); + setup(); } private void awaitChangeEventTopicAndCompactionCreateFinish(String ns, String topic) throws Exception {