This is an automated email from the ASF dual-hosted git repository. yong pushed a commit to branch branch-4.15 in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
commit 15fb058c8d6cddd8c899392c783da9145e32b7bc Author: Masahiro Sakamoto <[email protected]> AuthorDate: Thu Sep 29 22:39:24 2022 +0900 Issue 3070: Fix bug where checkAllLedgers gets stuck when read throttling is enabled (#3214) (cherry picked from commit 21560fb9afd9da61231a709c0b86a1a7b2d0f8b0) --- .../main/java/org/apache/bookkeeper/client/LedgerChecker.java | 9 +++++++-- .../java/org/apache/bookkeeper/client/TestLedgerChecker.java | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java index f3a49d31a6..68c6adb0b0 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Semaphore; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicBoolean; @@ -425,6 +426,11 @@ public class LedgerChecker { if (curEntryId == lastEntry) { final long entryToRead = curEntryId; + final CompletableFuture<Void> future = new CompletableFuture<>(); + future.whenCompleteAsync((re, ex) -> { + checkFragments(fragments, cb, percentageOfLedgerFragmentToBeVerified); + }); + final EntryExistsCallback eecb = new EntryExistsCallback(lh.getLedgerMetadata().getWriteQuorumSize(), new GenericCallback<Boolean>() { @Override @@ -432,8 +438,7 @@ public class LedgerChecker { if (result) { fragments.add(lastLedgerFragment); } - checkFragments(fragments, cb, - percentageOfLedgerFragmentToBeVerified); + future.complete(null); } }); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java index d78d1599f9..43122205e9 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java @@ -518,7 +518,7 @@ public class TestLedgerChecker extends BookKeeperClusterTestCase { private Set<LedgerFragment> getUnderReplicatedFragments(LedgerHandle lh) throws InterruptedException { - LedgerChecker checker = new LedgerChecker(bkc); + LedgerChecker checker = new LedgerChecker(bkc, 1); CheckerCallback cb = new CheckerCallback(); checker.checkLedger(lh, cb); Set<LedgerFragment> result = cb.waitAndGetResult();
