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.
*/