This is an automated email from the ASF dual-hosted git repository.

merlimat 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 02d12a65cc1 [fix][test] Fix flaky 
BacklogQuotaManagerTest.createNamespaces (HTTP 409 cascade) (#25680)
02d12a65cc1 is described below

commit 02d12a65cc106ee05314a6ceb261ae1672c68f0f
Author: Lari Hotari <[email protected]>
AuthorDate: Wed May 6 08:16:40 2026 +0300

    [fix][test] Fix flaky BacklogQuotaManagerTest.createNamespaces (HTTP 409 
cascade) (#25680)
---
 .../broker/auth/MockedPulsarServiceBaseTest.java   |  1 +
 .../broker/service/BacklogQuotaManagerTest.java    | 28 ++++++++++++++++------
 2 files changed, 22 insertions(+), 7 deletions(-)

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 550bc513902..c1629c723a3 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
@@ -733,6 +733,7 @@ public abstract class MockedPulsarServiceBaseTest extends 
TestRetrySupport {
      */
     public static void deleteNamespaceWithRetry(String ns, boolean force, 
PulsarAdmin admin) throws Exception {
         Awaitility.await()
+                .atMost(20, TimeUnit.SECONDS)
                 .pollDelay(500, TimeUnit.MILLISECONDS)
                 .until(() -> {
             try {
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 6ac258d0ba8..9a85b65b1e7 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
@@ -201,14 +201,28 @@ public class BacklogQuotaManagerTest {
     }
 
     @BeforeMethod(alwaysRun = true)
-    void createNamespaces() throws PulsarAdminException {
+    void createNamespaces() throws Exception {
         config.setPreciseTimeBasedBacklogQuotaCheck(false);
-        admin.namespaces().createNamespace("prop/ns-quota");
-        admin.namespaces().setNamespaceReplicationClusters("prop/ns-quota", 
Sets.newHashSet("usc"), false);
-        admin.namespaces().createNamespace("prop/quotahold");
-        admin.namespaces().setNamespaceReplicationClusters("prop/quotahold", 
Sets.newHashSet("usc"), false);
-        admin.namespaces().createNamespace("prop/quotaholdasync");
-        
admin.namespaces().setNamespaceReplicationClusters("prop/quotaholdasync", 
Sets.newHashSet("usc"), false);
+        createNamespaceForTest("prop/ns-quota");
+        createNamespaceForTest("prop/quotahold");
+        createNamespaceForTest("prop/quotaholdasync");
+    }
+
+    /**
+     * If a previous test's @AfterMethod timed out before the namespace was 
fully removed, the
+     * leftover would otherwise cascade as HTTP 409 here and fail every 
subsequent test.
+     * Force-delete and retry so each test starts with clean namespace state.
+     */
+    private void createNamespaceForTest(String ns) throws Exception {
+        try {
+            admin.namespaces().createNamespace(ns);
+        } catch (PulsarAdminException.ConflictException e) {
+            log.warn().attr("namespace", ns)
+                    .log("Namespace already exists from previous test — 
force-deleting and recreating");
+            deleteNamespaceWithRetry(ns, true);
+            admin.namespaces().createNamespace(ns);
+        }
+        admin.namespaces().setNamespaceReplicationClusters(ns, 
Sets.newHashSet("usc"), false);
     }
 
     @AfterMethod(alwaysRun = true)

Reply via email to