You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by yo...@apache.org on 2022/10/26 01:11:43 UTC
[bookkeeper] 01/11: Issue 3070: Fix bug where checkAllLedgers gets stuck when read throttling is enabled (#3214)
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 <ma...@yahoo-corp.jp>
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();