You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by te...@apache.org on 2023/11/11 07:17:46 UTC
(pulsar) branch branch-3.0 updated: [fix][broker] Fix failure while creating non-durable cursor with inactive managed-ledger (#21508)
This is an automated email from the ASF dual-hosted git repository.
technoboy pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 9fb313811fb [fix][broker] Fix failure while creating non-durable cursor with inactive managed-ledger (#21508)
9fb313811fb is described below
commit 9fb313811fbed8f4b4d26e83ea7d890ca069ff49
Author: Rajan Dhabalia <rd...@apache.org>
AuthorDate: Sat Nov 4 09:40:31 2023 -0700
[fix][broker] Fix failure while creating non-durable cursor with inactive managed-ledger (#21508)
---
.../apache/bookkeeper/mledger/ManagedLedger.java | 4 +++-
.../bookkeeper/mledger/impl/ManagedLedgerImpl.java | 5 ++++-
.../bookkeeper/mledger/impl/ManagedLedgerTest.java | 24 ++++++++++++++++++++++
.../offload/jcloud/impl/MockManagedLedger.java | 4 ++--
4 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/ManagedLedger.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/ManagedLedger.java
index c7dd8ea9129..f91d9ec3f5a 100644
--- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/ManagedLedger.java
+++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/ManagedLedger.java
@@ -682,8 +682,10 @@ public interface ManagedLedger {
/**
* Check current inactive ledger (based on {@link ManagedLedgerConfig#getInactiveLedgerRollOverTimeMs()} and
* roll over that ledger if inactive.
+ *
+ * @return true if ledger is considered for rolling over
*/
- void checkInactiveLedgerAndRollOver();
+ boolean checkInactiveLedgerAndRollOver();
/**
* Check if managed ledger should cache backlog reads.
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 e011bf3e6d7..1f0cd6c5f14 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
@@ -4456,7 +4456,7 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
}
@Override
- public void checkInactiveLedgerAndRollOver() {
+ public boolean checkInactiveLedgerAndRollOver() {
long currentTimeMs = System.currentTimeMillis();
if (inactiveLedgerRollOverTimeMs > 0 && currentTimeMs > (lastAddEntryTimeMs + inactiveLedgerRollOverTimeMs)) {
log.info("[{}] Closing inactive ledger, last-add entry {}", name, lastAddEntryTimeMs);
@@ -4477,10 +4477,13 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
}
ledgerClosed(lh);
+ createLedgerAfterClosed();
// we do not create ledger here, since topic is inactive for a long time.
}, null);
+ return true;
}
}
+ return false;
}
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 5fc2da22b66..f9c52ec60b2 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
@@ -124,6 +124,7 @@ import org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo.Ledge
import org.apache.bookkeeper.mledger.util.Futures;
import org.apache.bookkeeper.test.MockedBookKeeperTestCase;
import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.commons.lang3.mutable.MutableBoolean;
import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.pulsar.common.api.proto.CommandSubscribe.InitialPosition;
@@ -4074,4 +4075,27 @@ public class ManagedLedgerTest extends MockedBookKeeperTestCase {
});
future.join();
}
+
+ @Test
+ public void testNonDurableCursorCreateForInactiveLedger() throws Exception {
+ String mlName = "testLedgerInfoMetaCorrectIfAddEntryTimeOut";
+ BookKeeper spyBookKeeper = spy(bkc);
+ ManagedLedgerFactoryImpl factory = new ManagedLedgerFactoryImpl(metadataStore, spyBookKeeper);
+ ManagedLedgerConfig config = new ManagedLedgerConfig();
+ config.setInactiveLedgerRollOverTime(10, TimeUnit.MILLISECONDS);
+ ManagedLedgerImpl ml = (ManagedLedgerImpl) factory.open(mlName, config);
+
+ MutableBoolean isRolledOver = new MutableBoolean(false);
+ retryStrategically((test) -> {
+ if (isRolledOver.booleanValue()) {
+ return true;
+ }
+ isRolledOver.setValue(ml.checkInactiveLedgerAndRollOver());
+ return isRolledOver.booleanValue();
+ }, 5, 1000);
+ assertTrue(isRolledOver.booleanValue());
+
+ Position Position = new PositionImpl(-1L, -1L);
+ assertNotNull(ml.newNonDurableCursor(Position));
+ }
}
diff --git a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java
index 774b0143f95..66ace69d7cd 100644
--- a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java
+++ b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java
@@ -372,8 +372,8 @@ public class MockManagedLedger implements ManagedLedger {
}
@Override
- public void checkInactiveLedgerAndRollOver() {
-
+ public boolean checkInactiveLedgerAndRollOver() {
+ return false;
}
@Override