Skip to content

Commit 40298db

Browse files
committed
Make testing simpler
1 parent 3818586 commit 40298db

2 files changed

Lines changed: 41 additions & 187 deletions

File tree

managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/DuplicateManagedLedgerTest.java

Lines changed: 0 additions & 187 deletions
This file was deleted.

managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerFactoryTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@
2020

2121
import static org.testng.Assert.assertEquals;
2222

23+
import java.util.UUID;
24+
import java.util.concurrent.TimeUnit;
2325
import org.apache.bookkeeper.mledger.ManagedCursor;
2426
import org.apache.bookkeeper.mledger.ManagedLedgerConfig;
2527
import org.apache.bookkeeper.mledger.ManagedLedgerInfo;
2628
import org.apache.bookkeeper.mledger.ManagedLedgerInfo.CursorInfo;
2729
import org.apache.bookkeeper.mledger.ManagedLedgerInfo.MessageRangeInfo;
2830
import org.apache.bookkeeper.test.MockedBookKeeperTestCase;
31+
import org.awaitility.Awaitility;
32+
import org.testng.Assert;
2933
import org.testng.annotations.Test;
3034

3135
public class ManagedLedgerFactoryTest extends MockedBookKeeperTestCase {
@@ -71,4 +75,41 @@ public void testGetManagedLedgerInfoWithClose() throws Exception {
7175
assertEquals(mri.to.entryId, 0);
7276
}
7377

78+
/**
79+
* see: https://github.com/apache/pulsar/pull/18688
80+
*/
81+
@Test
82+
public void testConcurrentCloseLedgerAndSwitchLedgerForReproduceIssue() throws Exception {
83+
String managedLedgerName = "lg_" + UUID.randomUUID().toString().replaceAll("-", "_");
84+
85+
ManagedLedgerConfig config = new ManagedLedgerConfig();
86+
config.setThrottleMarkDelete(1);
87+
config.setMaximumRolloverTime(Integer.MAX_VALUE, TimeUnit.SECONDS);
88+
config.setMaxEntriesPerLedger(5);
89+
90+
// call "switch ledger" and "managedLedger.close" concurrently.
91+
ManagedLedgerImpl managedLedger1 = (ManagedLedgerImpl) factory.open(managedLedgerName, config);
92+
waitManagedLedgerStateEquals(managedLedger1, ManagedLedgerImpl.State.LedgerOpened);
93+
managedLedger1.close();
94+
95+
ManagedLedgerImpl managedLedger2 = (ManagedLedgerImpl) factory.open(managedLedgerName, config);
96+
waitManagedLedgerStateEquals(managedLedger2, ManagedLedgerImpl.State.LedgerOpened);
97+
98+
// Mock the task create ledger complete now, it will change the state to another value which not is Closed.
99+
managedLedger1.createComplete(1, null, null);
100+
managedLedger1.close();
101+
102+
// Verify managedLedger2 is still there.
103+
Assert.assertFalse(factory.ledgers.isEmpty());
104+
Assert.assertEquals(factory.ledgers.get(managedLedger2.getName()).join(), managedLedger2);
105+
106+
// cleanup.
107+
managedLedger2.close();
108+
}
109+
110+
private void waitManagedLedgerStateEquals(ManagedLedgerImpl managedLedger, ManagedLedgerImpl.State expectedStat){
111+
Awaitility.await().untilAsserted(() ->
112+
Assert.assertTrue(managedLedger.getState() == expectedStat));
113+
}
114+
74115
}

0 commit comments

Comments
 (0)