This is an automated email from the ASF dual-hosted git repository.
zixuan 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 c544ea3aae1 [fix][test] Fix flaky test deleteNamespaceGracefully
(#18220)
c544ea3aae1 is described below
commit c544ea3aae1a8be8e7bcd4f89fb1899ce0a3350f
Author: fengyubiao <[email protected]>
AuthorDate: Thu Nov 24 15:20:44 2022 +0800
[fix][test] Fix flaky test deleteNamespaceGracefully (#18220)
---
.../apache/pulsar/broker/admin/AdminApi2Test.java | 14 +-
.../apache/pulsar/broker/admin/AdminApiTest.java | 32 ++--
.../pulsar/broker/admin/AdminApiTlsAuthTest.java | 2 +-
.../apache/pulsar/broker/admin/AdminRestTest.java | 2 +-
.../apache/pulsar/broker/admin/NamespacesTest.java | 2 +-
.../pulsar/broker/admin/v1/V1_AdminApiTest.java | 2 +-
.../broker/auth/MockedPulsarServiceBaseTest.java | 42 +++--
.../namespace/NamespaceOwnershipListenerTests.java | 6 +-
.../OwnerShipForCurrentServerTestBase.java | 3 +-
.../ResourceGroupConfigListenerTest.java | 2 +-
.../broker/service/BacklogQuotaManagerTest.java | 27 ++-
.../BrokerServiceBundlesCacheInvalidationTest.java | 2 +-
.../pulsar/broker/service/BrokerTestBase.java | 184 ---------------------
.../broker/service/CanPausedNamespaceService.java | 66 --------
.../broker/service/PersistentTopicE2ETest.java | 4 +-
.../broker/transaction/TransactionTestBase.java | 24 +--
.../client/api/DispatcherBlockConsumerTest.java | 3 +-
.../client/api/SimpleProducerConsumerTest.java | 2 +-
18 files changed, 85 insertions(+), 334 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 d04d0c12d6f..6809b4402d7 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
@@ -164,7 +164,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
pulsar.getConfiguration().setForceDeleteNamespaceAllowed(true);
for (String tenant : admin.tenants().getTenants()) {
for (String namespace : admin.namespaces().getNamespaces(tenant)) {
- deleteNamespaceGraceFullyByMultiPulsars(namespace, true,
admin, pulsar,
+ deleteNamespaceWithRetry(namespace, true, admin, pulsar,
mockPulsarSetup.getPulsar());
}
admin.tenants().deleteTenant(tenant, true);
@@ -1515,7 +1515,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
assertFalse(admin.topics().getList(namespace).isEmpty());
try {
- deleteNamespaceGraceFully(namespace, false);
+ admin.namespaces().deleteNamespace(namespace, false);
fail("should have failed due to namespace not empty");
} catch (PulsarAdminException e) {
// Expected: cannot delete non-empty tenant
@@ -1526,7 +1526,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
assertTrue(admin.topics().getList(namespace).isEmpty());
// delete namespace
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
assertFalse(admin.namespaces().getNamespaces(tenant).contains(namespace));
assertTrue(admin.namespaces().getNamespaces(tenant).isEmpty());
@@ -1607,7 +1607,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
assertFalse(admin.topics().getList(namespace).isEmpty());
try {
- deleteNamespaceGraceFully(namespace, false);
+ admin.namespaces().deleteNamespace(namespace, false);
fail("should have failed due to namespace not empty");
} catch (PulsarAdminException e) {
// Expected: cannot delete non-empty tenant
@@ -1618,7 +1618,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
assertTrue(admin.topics().getList(namespace).isEmpty());
// delete namespace
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
assertFalse(admin.namespaces().getNamespaces(tenant).contains(namespace));
assertTrue(admin.namespaces().getNamespaces(tenant).isEmpty());
@@ -1667,7 +1667,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
});
producer.close();
admin.topics().delete(topic);
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
Awaitility.await().untilAsserted(() -> {
assertTrue(admin.namespaces().getNamespaces(tenant).isEmpty());
});
@@ -1880,7 +1880,7 @@ public class AdminApi2Test extends
MockedPulsarServiceBaseTest {
final String topic = "persistent://" + namespaceName + "/test" +
UUID.randomUUID();
pulsarClient.newProducer(Schema.DOUBLE).topic(topic).create().close();
Awaitility.await().untilAsserted(() ->
assertNotNull(admin.schemas().getSchemaInfo(topic)));
- deleteNamespaceGraceFully(namespaceName, true);
+ deleteNamespaceWithRetry(namespaceName, true);
try {
admin.schemas().getSchemaInfo(topic);
Assert.fail("fail");
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index 5a845ac9e73..b303386c65f 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -202,7 +202,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
pulsar.getConfiguration().setForceDeleteNamespaceAllowed(true);
for (String tenant : admin.tenants().getTenants()) {
for (String namespace : admin.namespaces().getNamespaces(tenant)) {
- deleteNamespaceGraceFully(namespace, true);
+ deleteNamespaceWithRetry(namespace, true);
}
admin.tenants().deleteTenant(tenant, true);
}
@@ -297,7 +297,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
Awaitility.await()
.untilAsserted(() ->
assertEquals(admin.clusters().getClusters(), List.of("test")));
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
admin.clusters().deleteCluster("test");
assertEquals(admin.clusters().getClusters(), new ArrayList<>());
@@ -526,7 +526,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
String.format("%s:%d", parts[0],
pulsar.getListenPortHTTPS().get()));
Assert.assertEquals(nsMap2.size(), 2);
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
admin.clusters().deleteCluster("test");
assertEquals(admin.clusters().getClusters(), new ArrayList<>());
}
@@ -757,7 +757,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertEquals(e.getStatusCode(), 409);
assertEquals(e.getMessage(), "The tenant still has active
namespaces");
}
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
admin.tenants().deleteTenant("prop-xyz");
assertEquals(admin.tenants().getTenants(), new ArrayList<>());
@@ -786,7 +786,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertEquals(admin.namespaces().getPolicies("prop-xyz/ns3").bundles.getNumBundles(),
4);
assertEquals(admin.namespaces().getPolicies("prop-xyz/ns3").bundles.getBoundaries().size(),
5);
- deleteNamespaceGraceFully("prop-xyz/ns3", false);
+ deleteNamespaceWithRetry("prop-xyz/ns3", false);
try {
admin.namespaces().createNamespace("non-existing/ns1");
@@ -860,7 +860,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
}
assertTrue(i < 10);
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
assertEquals(admin.namespaces().getNamespaces("prop-xyz"),
List.of("prop-xyz/ns2"));
try {
@@ -1289,7 +1289,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
@Test(dataProvider = "numBundles")
public void testDeleteNamespaceBundle(Integer numBundles) throws Exception
{
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
admin.namespaces().createNamespace("prop-xyz/ns1-bundles", numBundles);
admin.namespaces().setNamespaceReplicationClusters("prop-xyz/ns1-bundles",
Set.of("test"));
@@ -1301,7 +1301,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertEquals(admin.namespaces().getTopics("prop-xyz/ns1-bundles"), new
ArrayList<>());
- deleteNamespaceGraceFully("prop-xyz/ns1-bundles", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1-bundles", false);
assertEquals(admin.namespaces().getNamespaces("prop-xyz", "test"), new
ArrayList<>());
}
@@ -1388,14 +1388,14 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertFalse(admin.topics().getList(namespace).isEmpty());
try {
- deleteNamespaceGraceFully(namespace, false);
+ admin.namespaces().deleteNamespace(namespace, false);
fail("should have failed due to namespace not empty");
} catch (PulsarAdminException e) {
// Expected: cannot delete non-empty tenant
}
// delete namespace forcefully
- deleteNamespaceGraceFully(namespace, true);
+ deleteNamespaceWithRetry(namespace, true);
assertFalse(admin.namespaces().getNamespaces(tenant).contains(namespace));
assertTrue(admin.namespaces().getNamespaces(tenant).isEmpty());
@@ -2287,7 +2287,7 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertEquals(result.someNewIntField, 0);
assertNull(result.someNewString);
- deleteNamespaceGraceFully("prop-xyz/ns1", false);
+ deleteNamespaceWithRetry("prop-xyz/ns1", false);
admin.tenants().deleteTenant("prop-xyz");
assertEquals(admin.tenants().getTenants(), new ArrayList<>());
}
@@ -3202,9 +3202,9 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
admin.topics().delete(topic1);
admin.topics().delete(topic2);
admin.topics().delete(topic3);
- deleteNamespaceGraceFully(namespace1, false);
- deleteNamespaceGraceFully(namespace2, false);
- deleteNamespaceGraceFully(namespace3, false);
+ deleteNamespaceWithRetry(namespace1, false);
+ deleteNamespaceWithRetry(namespace2, false);
+ deleteNamespaceWithRetry(namespace3, false);
}
@Test
@@ -3217,11 +3217,11 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
String ns = BrokerTestUtil.newUniqueName("prop-xyz/ns");
admin.namespaces().createNamespace(ns, 24);
- deleteNamespaceGraceFully(ns, false);
+ deleteNamespaceWithRetry(ns, false);
// Re-create and re-delete
admin.namespaces().createNamespace(ns, 32);
- deleteNamespaceGraceFully(ns, false);
+ deleteNamespaceWithRetry(ns, false);
}
@Test
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTlsAuthTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTlsAuthTest.java
index 90a21d78bcd..bd23e0d7e4e 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTlsAuthTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTlsAuthTest.java
@@ -459,7 +459,7 @@ public class AdminApiTlsAuthTest extends
MockedPulsarServiceBaseTest {
admin.topics().delete("tenant1/ns1/foobar", true);
log.info("Deleting namespace");
- deleteNamespaceGraceFully("tenant1/ns1", false, admin);
+ deleteNamespaceWithRetry("tenant1/ns1", false, admin);
}
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminRestTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminRestTest.java
index c44c80163d9..eb6083cebe1 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminRestTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminRestTest.java
@@ -117,7 +117,7 @@ public class AdminRestTest extends
MockedPulsarServiceBaseTest {
protected void cleanup() throws Exception {
// cleanup.
admin.topics().delete(topicName);
- deleteNamespaceGraceFully(namespaceName, false);
+ deleteNamespaceWithRetry(namespaceName, false);
admin.tenants().deleteTenant(tenantName);
admin.clusters().deleteCluster(clusterName);
// super cleanup.
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
index b4019c317c9..2b0a8c60b69 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
@@ -2017,7 +2017,7 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
if (StringUtils.isEmpty(ns)){
continue;
}
- deleteNamespaceGraceFully(ns, true);
+ deleteNamespaceWithRetry(ns, true);
}
pulsar.getConfiguration().setForceDeleteNamespaceAllowed(forceDeleteNamespaceAllowedOriginalValue);
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
index 674d0539a37..3b43874f180 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v1/V1_AdminApiTest.java
@@ -183,7 +183,7 @@ public class V1_AdminApiTest extends
MockedPulsarServiceBaseTest {
pulsar.getConfiguration().setForceDeleteNamespaceAllowed(true);
for (String tenant : admin.tenants().getTenants()) {
for (String namespace : admin.namespaces().getNamespaces(tenant)) {
- deleteNamespaceGraceFullyByMultiPulsars(namespace, true,
admin, pulsar,
+ deleteNamespaceWithRetry(namespace, true, admin, pulsar,
mockPulsarSetup.getPulsar());
}
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
index d035320b680..1a558b63433 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
@@ -35,6 +35,7 @@ import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
@@ -62,7 +63,6 @@ import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.intercept.CounterBrokerInterceptor;
import org.apache.pulsar.broker.namespace.NamespaceService;
import org.apache.pulsar.broker.service.BrokerTestBase;
-import org.apache.pulsar.broker.service.CanPausedNamespaceService;
import org.apache.pulsar.broker.service.PulsarMetadataEventSynchronizer;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.admin.PulsarAdminBuilder;
@@ -87,6 +87,7 @@ import org.mockito.Mockito;
import org.mockito.internal.util.MockUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
/**
* Base class for all tests that need a Pulsar instance without a ZK and BK
cluster.
@@ -384,7 +385,7 @@ public abstract class MockedPulsarServiceBaseTest extends
TestRetrySupport {
:
createConfigurationMetadataStore()).when(pulsar).createConfigurationMetadataStore(any());
Supplier<NamespaceService> namespaceServiceSupplier =
- () ->
spyWithClassAndConstructorArgs(CanPausedNamespaceService.class, pulsar);
+ () -> spyWithClassAndConstructorArgs(NamespaceService.class,
pulsar);
doReturn(namespaceServiceSupplier).when(pulsar).getNamespaceServiceProvider();
doReturn(sameThreadOrderedSafeExecutor).when(pulsar).getOrderedExecutor();
@@ -669,27 +670,44 @@ public abstract class MockedPulsarServiceBaseTest extends
TestRetrySupport {
}
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link BrokerTestBase#deleteNamespaceWithRetry(String, boolean,
PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force)
+ protected void deleteNamespaceWithRetry(String ns, boolean force)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsar);
+ BrokerTestBase.deleteNamespaceWithRetry(ns, force, admin, pulsar);
}
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link BrokerTestBase#deleteNamespaceWithRetry(String, boolean,
PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force,
PulsarAdmin admin)
+ protected void deleteNamespaceWithRetry(String ns, boolean force,
PulsarAdmin admin)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsar);
+ BrokerTestBase.deleteNamespaceWithRetry(ns, force, admin, pulsar);
}
/**
- * see see {@link BrokerTestBase#deleteNamespaceGraceFully(String,
boolean, PulsarAdmin, Collection)}
+ * see {@link MockedPulsarServiceBaseTest#deleteNamespaceWithRetry(String,
boolean, PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFullyByMultiPulsars(String ns, boolean
force, PulsarAdmin admin,
-
PulsarService...pulsars) throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsars);
+ public static void deleteNamespaceWithRetry(String ns, boolean force,
PulsarAdmin admin, PulsarService...pulsars)
+ throws Exception {
+ deleteNamespaceWithRetry(ns, force, admin, Arrays.asList(pulsars));
+ }
+
+ /**
+ * 1. Pause system "__change_event" topic creates.
+ * 2. Do delete namespace with retry because maybe fail by race-condition
with create topics.
+ */
+ public static void deleteNamespaceWithRetry(String ns, boolean force,
PulsarAdmin admin,
+ Collection<PulsarService>
pulsars) throws Exception {
+ Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> {
+ try {
+ // Maybe fail by race-condition with create topics, just retry.
+ admin.namespaces().deleteNamespace(ns, force);
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+ });
}
private static final Logger log =
LoggerFactory.getLogger(MockedPulsarServiceBaseTest.class);
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceOwnershipListenerTests.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceOwnershipListenerTests.java
index 0b1f687cc6b..02787aa1435 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceOwnershipListenerTests.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceOwnershipListenerTests.java
@@ -99,7 +99,7 @@ public class NamespaceOwnershipListenerTests extends
BrokerTestBase {
Assert.assertTrue(onLoad.get());
Assert.assertTrue(unLoad.get());
admin.topics().delete(topic);
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
}
@Test
@@ -120,7 +120,7 @@ public class NamespaceOwnershipListenerTests extends
BrokerTestBase {
}
admin.topics().deletePartitionedTopic(topicName);
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
}
@Test
@@ -170,6 +170,6 @@ public class NamespaceOwnershipListenerTests extends
BrokerTestBase {
Assert.assertEquals(onLoad.get(), 1);
Assert.assertEquals(unLoad.get(), 1);
admin.topics().delete(topic);
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
}
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnerShipForCurrentServerTestBase.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnerShipForCurrentServerTestBase.java
index 5f93711dc69..65fd9395631 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnerShipForCurrentServerTestBase.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnerShipForCurrentServerTestBase.java
@@ -45,7 +45,6 @@ import org.apache.pulsar.broker.PulsarService;
import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.auth.SameThreadOrderedSafeExecutor;
import org.apache.pulsar.broker.intercept.CounterBrokerInterceptor;
-import org.apache.pulsar.broker.service.CanPausedNamespaceService;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.metadata.api.extended.MetadataStoreExtended;
@@ -133,7 +132,7 @@ public class OwnerShipForCurrentServerTestBase {
doReturn(new
ZKMetadataStore(mockZooKeeperSession)).when(pulsar).createLocalMetadataStore(null);
doReturn(new
ZKMetadataStore(mockZooKeeperSession)).when(pulsar).createConfigurationMetadataStore(null);
Supplier<NamespaceService> namespaceServiceSupplier = () ->
spyWithClassAndConstructorArgs(
- CanPausedNamespaceService.class, pulsar);
+ NamespaceService.class, pulsar);
doReturn(namespaceServiceSupplier).when(pulsar).getNamespaceServiceProvider();
SameThreadOrderedSafeExecutor executor = new
SameThreadOrderedSafeExecutor();
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
index 8210af278a4..90c26530850 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
@@ -197,7 +197,7 @@ public class ResourceGroupConfigListenerTest extends
MockedPulsarServiceBaseTest
assertNull(pulsar.getResourceGroupServiceManager()
.getNamespaceResourceGroup(NamespaceName.get(namespaceName))));
- deleteNamespaceGraceFully(namespaceName, false);
+ deleteNamespaceWithRetry(namespaceName, false);
deleteResourceGroup(rgName);
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
index b619d72f1e8..a7e5dc09480 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
@@ -40,6 +40,7 @@ import org.apache.bookkeeper.mledger.Position;
import org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl;
import org.apache.pulsar.broker.PulsarService;
import org.apache.pulsar.broker.ServiceConfiguration;
+import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
import org.apache.pulsar.client.admin.GetStatsOptions;
import org.apache.pulsar.client.admin.PulsarAdmin;
@@ -83,27 +84,19 @@ public class BacklogQuotaManagerTest {
private static final int MAX_ENTRIES_PER_LEDGER = 5;
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link MockedPulsarServiceBaseTest#deleteNamespaceWithRetry(String,
boolean, PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force)
+ protected void deleteNamespaceWithRetry(String ns, boolean force)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsar);
+ MockedPulsarServiceBaseTest.deleteNamespaceWithRetry(ns, force, admin,
pulsar);
}
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link MockedPulsarServiceBaseTest#deleteNamespaceWithRetry(String,
boolean, PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force,
PulsarAdmin admin)
+ protected void deleteNamespaceWithRetry(String ns, boolean force,
PulsarAdmin admin)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsar);
- }
-
- /**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
- */
- protected void deleteNamespaceGraceFullyByMultiPulsars(String ns, boolean
force, PulsarAdmin admin,
-
PulsarService...pulsars) throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsars);
+ MockedPulsarServiceBaseTest.deleteNamespaceWithRetry(ns, force, admin,
pulsar);
}
@DataProvider(name = "backlogQuotaSizeGB")
@@ -186,9 +179,9 @@ public class BacklogQuotaManagerTest {
@AfterMethod(alwaysRun = true)
void clearNamespaces() throws Exception {
- deleteNamespaceGraceFully("prop/ns-quota", true);
- deleteNamespaceGraceFully("prop/quotahold", true);
- deleteNamespaceGraceFully("prop/quotaholdasync", true);
+ deleteNamespaceWithRetry("prop/ns-quota", true);
+ deleteNamespaceWithRetry("prop/quotahold", true);
+ deleteNamespaceWithRetry("prop/quotaholdasync", true);
}
private void rolloverStats() {
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceBundlesCacheInvalidationTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceBundlesCacheInvalidationTest.java
index 6bcfb28251c..c9771ddbe2f 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceBundlesCacheInvalidationTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceBundlesCacheInvalidationTest.java
@@ -59,7 +59,7 @@ public class BrokerServiceBundlesCacheInvalidationTest
extends BrokerTestBase {
// Delete and recreate with 32 bundles
admin.topics().delete(topic);
- deleteNamespaceGraceFully(namespace, false);
+ deleteNamespaceWithRetry(namespace, false);
admin.namespaces().createNamespace(namespace, 32);
BundlesData bundlesData = admin.namespaces().getBundles(namespace);
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerTestBase.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerTestBase.java
index c9006f797fc..5fd4edd2a30 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerTestBase.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerTestBase.java
@@ -18,46 +18,19 @@
*/
package org.apache.pulsar.broker.service;
-import static
org.apache.pulsar.common.naming.SystemTopicNames.NAMESPACE_EVENTS_LOCAL_NAME;
-import static org.apache.pulsar.compaction.Compactor.COMPACTION_SUBSCRIPTION;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.pulsar.broker.PulsarService;
import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
-import org.apache.pulsar.broker.namespace.NamespaceEphemeralData;
-import org.apache.pulsar.broker.service.persistent.PersistentTopic;
-import org.apache.pulsar.broker.systopic.SystemTopicClient;
-import org.apache.pulsar.client.admin.PulsarAdmin;
-import org.apache.pulsar.client.admin.PulsarAdminException;
-import org.apache.pulsar.common.events.PulsarEvent;
-import org.apache.pulsar.common.naming.NamespaceBundle;
-import org.apache.pulsar.common.naming.NamespaceName;
import org.apache.pulsar.common.naming.SystemTopicNames;
-import org.apache.pulsar.common.naming.TopicName;
import org.apache.pulsar.common.partition.PartitionedTopicMetadata;
import org.apache.pulsar.common.policies.data.ClusterData;
import org.apache.pulsar.common.policies.data.TenantInfoImpl;
-import org.apache.pulsar.common.util.FutureUtil;
import org.apache.pulsar.metadata.api.MetadataStoreException;
-import org.apache.pulsar.metadata.api.coordination.LockManager;
-import org.awaitility.Awaitility;
-import org.awaitility.reflect.WhiteboxImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Sets;
import java.util.Random;
-import java.util.concurrent.TimeUnit;
public abstract class BrokerTestBase extends MockedPulsarServiceBaseTest {
protected static final int ASYNC_EVENT_COMPLETION_WAIT = 100;
@@ -135,162 +108,5 @@ public abstract class BrokerTestBase extends
MockedPulsarServiceBaseTest {
return "prop/ns-abc/topic-" + Long.toHexString(random.nextLong());
}
- /**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
- */
- protected void deleteNamespaceGraceFully(String ns, boolean force)
- throws Exception {
- deleteNamespaceGraceFully(ns, force, admin, pulsar);
- }
-
- /**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
- */
- public static void deleteNamespaceGraceFully(String ns, boolean force,
PulsarAdmin admin, PulsarService...pulsars)
- throws Exception {
- deleteNamespaceGraceFully(ns, force, admin, Arrays.asList(pulsars));
- }
-
- /**
- * Wait until system topic "__change_event" and subscription
"__compaction" are created, and then delete the namespace.
- */
- public static void deleteNamespaceGraceFully(String ns, boolean force,
PulsarAdmin admin,
- Collection<PulsarService>
pulsars) throws Exception {
- // namespace v1 should not wait system topic create.
- if (ns.split("/").length > 2){
- admin.namespaces().deleteNamespace(ns, force);
- return;
- }
-
- // If disabled system-topic, should not wait system topic create.
- boolean allBrokerDisabledSystemTopic = true;
- for (PulsarService pulsar : pulsars) {
- if (!pulsar.getConfiguration().isSystemTopicEnabled()) {
- continue;
- }
- TopicPoliciesService topicPoliciesService =
pulsar.getTopicPoliciesService();
- if (!(topicPoliciesService instanceof
SystemTopicBasedTopicPoliciesService)) {
- continue;
- }
- allBrokerDisabledSystemTopic = false;
- }
- if (allBrokerDisabledSystemTopic){
- admin.namespaces().deleteNamespace(ns, force);
- return;
- }
-
- // Stop trigger "onNamespaceBundleOwned".
- List<CompletableFuture<SystemTopicClient.Reader<PulsarEvent>>>
createReaderTasks = new ArrayList<>();
- List<String> lockedBundles = new ArrayList<>();
- for (PulsarService pulsar : pulsars) {
- // Prevents new events from triggering system topic creation.
- CanPausedNamespaceService canPausedNamespaceService =
(CanPausedNamespaceService) pulsar.getNamespaceService();
- canPausedNamespaceService.pause();
-
- // If no bundle has been loaded, then the System Topic will not
trigger creation.
- LockManager lockManager =
pulsar.getCoordinationService().getLockManager(NamespaceEphemeralData.class);
- lockedBundles.addAll((List<String>)
lockManager.listLocks("/namespace" + "/" + ns).join());
-
- // Determines whether the creation of System topic is triggered.
- // If readerCaches contains namespace, the creation of System
topic already triggered.
- TopicPoliciesService topicPoliciesService =
pulsar.getTopicPoliciesService();
- if (topicPoliciesService instanceof
- SystemTopicBasedTopicPoliciesService
systemTopicBasedTopicPoliciesService) {
- Map<NamespaceName,
CompletableFuture<SystemTopicClient.Reader<PulsarEvent>>> readerCaches =
-
WhiteboxImpl.getInternalState(systemTopicBasedTopicPoliciesService,
"readerCaches");
- if (readerCaches.containsKey(NamespaceName.get(ns))) {
-
createReaderTasks.add(readerCaches.get(NamespaceName.get(ns)));
- }
- }
- }
- // Wait all reader-create tasks.
- FutureUtil.waitForAll(createReaderTasks).join();
-
- // If the bundle elect has not yet been triggered, skip wait.
- if (CollectionUtils.isEmpty(lockedBundles) &&
createReaderTasks.isEmpty()){
- admin.namespaces().deleteNamespace(ns, force);
- return;
- }
-
- // Trigger change event topic create.
- PulsarService firstPulsar = pulsars.iterator().next();
- NamespaceName namespace = NamespaceName.get(ns);
- NamespaceBundle namespaceBundle = mock(NamespaceBundle.class);
- when(namespaceBundle.getNamespaceObject()).thenReturn(namespace);
-
firstPulsar.getTopicPoliciesService().addOwnedNamespaceBundleAsync(namespaceBundle);
- // Wait for change event topic and compaction create finish.
- String allowAutoTopicCreationType =
firstPulsar.getConfiguration().getAllowAutoTopicCreationType();
- int defaultNumPartitions =
firstPulsar.getConfiguration().getDefaultNumPartitions();
- ArrayList<String> expectChangeEventTopics = new ArrayList<>();
- if ("non-partitioned".equals(allowAutoTopicCreationType)){
- String t = String.format("persistent://%s/%s", ns,
NAMESPACE_EVENTS_LOCAL_NAME);
- expectChangeEventTopics.add(t);
- } else {
- for (int i = 0; i < defaultNumPartitions; i++){
- String t = String.format("persistent://%s/%s-partition-%s",
ns, NAMESPACE_EVENTS_LOCAL_NAME, i);
- expectChangeEventTopics.add(t);
- }
- }
- Awaitility.await().atMost(30, TimeUnit.SECONDS).until(() -> {
- boolean finished = true;
- for (String changeEventTopicName : expectChangeEventTopics){
- boolean bundleExists = firstPulsar.getNamespaceService()
-
.checkTopicOwnership(TopicName.get(changeEventTopicName))
- .exceptionally(ex -> false).join();
- if (!bundleExists){
- finished = false;
- break;
- }
- CompletableFuture<Optional<Topic>> completableFuture =
-
firstPulsar.getBrokerService().getTopic(changeEventTopicName, false);
- if (completableFuture == null){
- finished = false;
- break;
- }
- Optional<Topic> optionalTopic = completableFuture.get();
- if (!optionalTopic.isPresent()){
- finished = false;
- break;
- }
- PersistentTopic changeEventTopic = (PersistentTopic)
optionalTopic.get();
- if (!changeEventTopic.isCompactionEnabled()){
- break;
- }
- if
(!changeEventTopic.getSubscriptions().containsKey(COMPACTION_SUBSCRIPTION)){
- finished = false;
- break;
- }
- }
- return finished;
- });
-
- // Do delete.
- int retryTimes = 3;
- while (true) {
- try {
- admin.namespaces().deleteNamespace(ns, force);
- break;
- } catch (PulsarAdminException ex) {
- // Do retry only if topic fenced.
- if (ex.getStatusCode() == 500 &&
ex.getMessage().contains("TopicFencedException")){
- if (--retryTimes > 0){
- continue;
- } else {
- throw ex;
- }
- }
- throw ex;
- }
- }
-
- // Resume trigger "onNamespaceBundleOwned".
- for (PulsarService pulsarService : pulsars) {
- // Prevents new events from triggering system topic creation.
- CanPausedNamespaceService canPausedNamespaceService =
- (CanPausedNamespaceService)
pulsarService.getNamespaceService();
- canPausedNamespaceService.resume();
- }
- }
-
private static final Logger LOG =
LoggerFactory.getLogger(BrokerTestBase.class);
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/CanPausedNamespaceService.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/CanPausedNamespaceService.java
deleted file mode 100644
index 34fb2e708fb..00000000000
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/CanPausedNamespaceService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pulsar.broker.service;
-
-import java.util.concurrent.locks.ReentrantLock;
-import org.apache.pulsar.broker.PulsarService;
-import org.apache.pulsar.broker.namespace.NamespaceService;
-import org.apache.pulsar.common.naming.NamespaceBundle;
-
-public class CanPausedNamespaceService extends NamespaceService {
-
- private volatile boolean paused = false;
-
- private ReentrantLock lock = new ReentrantLock();
-
- public CanPausedNamespaceService(PulsarService pulsar) {
- super(pulsar);
- }
-
- @Override
- protected void onNamespaceBundleOwned(NamespaceBundle bundle) {
- lock.lock();
- try {
- if (paused){
- return;
- }
- super.onNamespaceBundleOwned(bundle);
- } finally {
- lock.unlock();
- }
- }
-
- public void pause(){
- lock.lock();
- try {
- paused = true;
- } finally {
- lock.unlock();
- }
- }
-
- public void resume(){
- lock.lock();
- try {
- paused = false;
- } finally {
- lock.unlock();
- }
- }
-}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java
index 374173203f6..9bd34cc07e0 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java
@@ -998,7 +998,7 @@ public class PersistentTopicE2ETest extends BrokerTestBase {
consumer.close();
admin.topics().deleteSubscription(topicName, subName);
admin.topics().delete(topicName);
- deleteNamespaceGraceFully(namespaceName, false);
+ deleteNamespaceWithRetry(namespaceName, false);
}
@Test
@@ -1090,7 +1090,7 @@ public class PersistentTopicE2ETest extends
BrokerTestBase {
consumer.close();
admin.topics().deleteSubscription(topicName, subName);
admin.topics().delete(topicName);
- deleteNamespaceGraceFully(namespaceName, true);
+ deleteNamespaceWithRetry(namespaceName, true);
} catch (PulsarAdminException e) {
Assert.assertEquals(e.getStatusCode(), 500);
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java
index 82a62a1e3a8..d48ef901f54 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java
@@ -45,11 +45,11 @@ import org.apache.bookkeeper.util.ZkUtils;
import org.apache.pulsar.broker.BookKeeperClientFactory;
import org.apache.pulsar.broker.PulsarService;
import org.apache.pulsar.broker.ServiceConfiguration;
+import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
import org.apache.pulsar.broker.auth.SameThreadOrderedSafeExecutor;
import org.apache.pulsar.broker.intercept.CounterBrokerInterceptor;
import org.apache.pulsar.broker.namespace.NamespaceService;
import org.apache.pulsar.broker.service.BrokerTestBase;
-import org.apache.pulsar.broker.service.CanPausedNamespaceService;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.common.naming.NamespaceName;
@@ -198,7 +198,7 @@ public abstract class TransactionTestBase extends
TestRetrySupport {
doReturn(new
ZKMetadataStore(mockZooKeeperSession)).when(pulsar).createLocalMetadataStore(null);
doReturn(new
ZKMetadataStore(mockZooKeeperSession)).when(pulsar).createConfigurationMetadataStore(null);
Supplier<NamespaceService> namespaceServiceSupplier =
- () ->
spyWithClassAndConstructorArgs(CanPausedNamespaceService.class, pulsar);
+ () -> spyWithClassAndConstructorArgs(NamespaceService.class,
pulsar);
doReturn(namespaceServiceSupplier).when(pulsar).getNamespaceServiceProvider();
SameThreadOrderedSafeExecutor executor = new
SameThreadOrderedSafeExecutor();
@@ -332,26 +332,18 @@ public abstract class TransactionTestBase extends
TestRetrySupport {
}
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link BrokerTestBase#deleteNamespaceWithRetry(String, boolean,
PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force)
+ protected void deleteNamespaceWithRetry(String ns, boolean force)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin,
pulsarServiceList);
+ MockedPulsarServiceBaseTest.deleteNamespaceWithRetry(ns, force, admin,
pulsarServiceList);
}
/**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
+ * see {@link MockedPulsarServiceBaseTest#deleteNamespaceWithRetry(String,
boolean, PulsarAdmin, Collection)}
*/
- protected void deleteNamespaceGraceFully(String ns, boolean force,
PulsarAdmin admin)
+ protected void deleteNamespaceWithRetry(String ns, boolean force,
PulsarAdmin admin)
throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin,
pulsarServiceList);
- }
-
- /**
- * see {@link BrokerTestBase#deleteNamespaceGraceFully(String, boolean,
PulsarAdmin, Collection)}
- */
- protected void deleteNamespaceGraceFullyByMultiPulsars(String ns, boolean
force, PulsarAdmin admin,
-
Collection<PulsarService> pulsars) throws Exception {
- BrokerTestBase.deleteNamespaceGraceFully(ns, force, admin, pulsars);
+ MockedPulsarServiceBaseTest.deleteNamespaceWithRetry(ns, force, admin,
pulsarServiceList);
}
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DispatcherBlockConsumerTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DispatcherBlockConsumerTest.java
index ec24c066f36..fc103a46027 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DispatcherBlockConsumerTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DispatcherBlockConsumerTest.java
@@ -50,7 +50,6 @@ import java.util.stream.Collectors;
import lombok.Cleanup;
import org.apache.pulsar.broker.namespace.NamespaceService;
import org.apache.pulsar.broker.service.BrokerService;
-import org.apache.pulsar.broker.service.CanPausedNamespaceService;
import
org.apache.pulsar.broker.service.persistent.PersistentDispatcherMultipleConsumers;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
import org.apache.pulsar.client.impl.ConsumerImpl;
@@ -636,7 +635,7 @@ public class DispatcherBlockConsumerTest extends
ProducerConsumerBase {
if (unloadBundleGracefully) {
// set clean namespace which will not let broker unload bundle
gracefully: stop broker
Supplier<NamespaceService> namespaceServiceSupplier =
- () ->
spyWithClassAndConstructorArgs(CanPausedNamespaceService.class, pulsar);
+ () ->
spyWithClassAndConstructorArgs(NamespaceService.class, pulsar);
doReturn(namespaceServiceSupplier).when(pulsar).getNamespaceServiceProvider();
}
stopBroker();
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java
index 4329083b30c..8b033d0231f 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java
@@ -140,7 +140,7 @@ public class SimpleProducerConsumerTest extends
ProducerConsumerBase {
for (String tenant : admin.tenants().getTenants()) {
for (String namespace : admin.namespaces().getNamespaces(tenant)) {
- deleteNamespaceGraceFully(namespace, true);
+ deleteNamespaceWithRetry(namespace, true);
}
admin.tenants().deleteTenant(tenant, true);
}