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 2774a9dd11d [fix][test] Stabilize delayed auditor lost bookie tests in 
AuditorLedgerCheckerTest (#25957)
2774a9dd11d is described below

commit 2774a9dd11d1795c379a3c1dd876121747aa9eef
Author: Oneby Wang <[email protected]>
AuthorDate: Mon Jun 8 00:51:47 2026 +0800

    [fix][test] Stabilize delayed auditor lost bookie tests in 
AuditorLedgerCheckerTest (#25957)
---
 .../replication/AuditorLedgerCheckerTest.java      | 27 ++++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
index 22454e1fdf2..cc27177076f 100644
--- 
a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
+++ 
b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java
@@ -392,8 +392,10 @@ public class AuditorLedgerCheckerTest extends 
BookKeeperClusterTestCase {
         final CountDownLatch underReplicaLatch = 
registerUrLedgerWatcher(ledgerList
                 .size());
 
-        // wait for 5 seconds before starting the recovery work when a bookie 
fails
-        urLedgerMgr.setLostBookieRecoveryDelay(5);
+        int lostBookieRecoveryDelaySeconds = 5;
+        // wait before starting the recovery work when a bookie fails
+        urLedgerMgr.setLostBookieRecoveryDelay(lostBookieRecoveryDelaySeconds);
+        Auditor auditorBookiesAuditor = getAuditorBookiesAuditor();
 
         AtomicReference<String> shutdownBookieRef = new AtomicReference<>();
         CountDownLatch shutdownLatch = new CountDownLatch(1);
@@ -407,12 +409,15 @@ public class AuditorLedgerCheckerTest extends 
BookKeeperClusterTestCase {
         }).start();
 
         log.debug("Waiting for ledgers to be marked as under replicated");
-        assertFalse("audit of lost bookie isn't delayed", 
underReplicaLatch.await(4, TimeUnit.SECONDS));
+        waitUntilAuditTaskScheduled(auditorBookiesAuditor, 10, 
TimeUnit.SECONDS);
+        assertFalse("audit of lost bookie isn't delayed",
+                underReplicaLatch.await(lostBookieRecoveryDelaySeconds - 1, 
TimeUnit.SECONDS));
         assertEquals("under replicated ledgers identified when it was not 
expected", 0,
                 urLedgerList.size());
 
-        // wait for another 5 seconds for the ledger to get reported as under 
replicated
-        assertTrue("audit of lost bookie isn't delayed", 
underReplicaLatch.await(2, TimeUnit.SECONDS));
+        // wait for the delayed task to run and report the ledger as under 
replicated
+        assertTrue("audit of lost bookie wasn't triggered after delay",
+                underReplicaLatch.await(3, TimeUnit.SECONDS));
 
         assertTrue("Ledger is not marked as underreplicated:" + ledgerId,
                 urLedgerList.contains(ledgerId));
@@ -904,6 +909,18 @@ public class AuditorLedgerCheckerTest extends 
BookKeeperClusterTestCase {
         throw new TimeoutException("Could not find an audit within 5 seconds");
     }
 
+    private void waitUntilAuditTaskScheduled(Auditor auditor, long timeout, 
TimeUnit unit) throws Exception {
+        long deadlineNanos = System.nanoTime() + unit.toNanos(timeout);
+        while (System.nanoTime() < deadlineNanos) {
+            Future<?> auditTask = auditor.getAuditTask();
+            if (auditTask != null && !auditTask.isDone()) {
+                return;
+            }
+            Thread.sleep(100);
+        }
+        fail("Timed out waiting for delayed audit task to be scheduled");
+    }
+
     /**
      * Wait for ledger to be underreplicated, and to be missing all replicas 
specified.
      */

Reply via email to