You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by xy...@apache.org on 2022/07/29 07:07:31 UTC
[pulsar] 08/09: [fix][broker] Fix stats-internal with option -m cause active ledger recover then close (#16662)
This is an automated email from the ASF dual-hosted git repository.
xyz pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 2d4577651217c53c39e5f8385f8b7d7013c230b0
Author: yapeng <56...@qq.com>
AuthorDate: Wed Jul 27 10:01:33 2022 +0800
[fix][broker] Fix stats-internal with option -m cause active ledger recover then close (#16662)
(cherry picked from commit b3bced282d647a47f9fd60db35390cc6348d25dc)
---
.../bookkeeper/mledger/impl/ManagedLedgerImpl.java | 17 +++++++++++++++--
.../bookkeeper/mledger/impl/ManagedLedgerTest.java | 17 +++++++++++++++++
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
index 3a35d71736e..2f1655dd3d4 100644
--- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
+++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
@@ -1726,7 +1726,12 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
}
public CompletableFuture<String> getLedgerMetadata(long ledgerId) {
- return getLedgerHandle(ledgerId).thenApply(rh -> rh.getLedgerMetadata().toSafeString());
+ LedgerHandle currentLedger = this.currentLedger;
+ if (currentLedger != null && ledgerId == currentLedger.getId()) {
+ return CompletableFuture.completedFuture(currentLedger.getLedgerMetadata().toSafeString());
+ } else {
+ return getLedgerHandle(ledgerId).thenApply(rh -> rh.getLedgerMetadata().toSafeString());
+ }
}
@Override
@@ -4008,7 +4013,15 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
return CompletableFuture.completedFuture(Collections.emptySet());
}
- return getLedgerHandle(ledgerId).thenCompose(lh -> {
+ CompletableFuture<ReadHandle> ledgerHandleFuture;
+ LedgerHandle currentLedger = this.currentLedger;
+ if (currentLedger != null && ledgerId == currentLedger.getId()) {
+ ledgerHandleFuture = CompletableFuture.completedFuture(currentLedger);
+ } else {
+ ledgerHandleFuture = getLedgerHandle(ledgerId);
+ }
+
+ return ledgerHandleFuture.thenCompose(lh -> {
Set<BookieId> ensembles = new HashSet<>();
lh.getLedgerMetadata().getAllEnsembles().values().forEach(ensembles::addAll);
return CompletableFuture.completedFuture(ensembles);
diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java
index 7f1ed67ce8d..ce994fba53a 100644
--- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java
+++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java
@@ -3467,4 +3467,21 @@ public class ManagedLedgerTest extends MockedBookKeeperTestCase {
Assert.assertFalse(ledgerInfo.get(100, TimeUnit.MILLISECONDS).getOffloadContext().getComplete());
});
}
+
+ @Test
+ public void testGetLedgerMetadata() throws Exception {
+ ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) factory.open("testGetLedgerMetadata");
+ long lastLedger = managedLedger.ledgers.lastEntry().getKey();
+ managedLedger.getLedgerMetadata(lastLedger);
+ Assert.assertFalse(managedLedger.ledgerCache.containsKey(lastLedger));
+ }
+
+ @Test
+ public void testGetEnsemblesAsync() throws Exception {
+ // test getEnsemblesAsync of latest ledger will not open it twice and put it in ledgerCache.
+ ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) factory.open("testGetLedgerMetadata");
+ long lastLedger = managedLedger.ledgers.lastEntry().getKey();
+ managedLedger.getEnsemblesAsync(lastLedger).join();
+ Assert.assertFalse(managedLedger.ledgerCache.containsKey(lastLedger));
+ }
}