This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 72def52d9872f8a7ec3828dd49eccf365a4e4936 Author: Zixuan Liu <[email protected]> AuthorDate: Wed May 7 18:10:03 2025 +0800 [fix][test] Fix flaky ManagedCursorTest.testSkipEntriesWithIndividualDeletedMessages (#24244) Signed-off-by: Zixuan Liu <[email protected]> (cherry picked from commit 06341fc9f30c26928193b28c0d98c01ecef43a65) --- .../bookkeeper/mledger/impl/ManagedCursorTest.java | 30 +++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java index 24e3da16e77..d77088a9e86 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java @@ -1810,6 +1810,12 @@ public class ManagedCursorTest extends MockedBookKeeperTestCase { Position pos4 = ledger.addEntry("dummy-entry-4".getBytes(Encoding)); Position pos5 = ledger.addEntry("dummy-entry-5".getBytes(Encoding)); + // Wait until a new ledger is created after the previous one has been closed. + // This happens because maxEntriesPerLedger is set to 5, so a new ledger is opened after every 5 entries. + Awaitility.await().untilAsserted(() -> { + assertTrue(ledger.getLedgersInfo().lastEntry().getKey() > pos5.getLedgerId()); + }); + // delete individual messages c1.delete(pos2); c1.delete(pos4); @@ -1819,19 +1825,25 @@ public class ManagedCursorTest extends MockedBookKeeperTestCase { assertEquals(c1.getReadPosition(), new PositionImpl(pos5.getLedgerId() + 1, 0)); assertEquals(c1.getMarkDeletedPosition(), pos5); - pos1 = ledger.addEntry("dummy-entry-1".getBytes(Encoding)); - pos2 = ledger.addEntry("dummy-entry-2".getBytes(Encoding)); - pos3 = ledger.addEntry("dummy-entry-3".getBytes(Encoding)); - pos4 = ledger.addEntry("dummy-entry-4".getBytes(Encoding)); - pos5 = ledger.addEntry("dummy-entry-5".getBytes(Encoding)); + Position pos6 = ledger.addEntry("dummy-entry-1".getBytes(Encoding)); + Position pos7 = ledger.addEntry("dummy-entry-2".getBytes(Encoding)); + Position pos8 = ledger.addEntry("dummy-entry-3".getBytes(Encoding)); + Position pos9 = ledger.addEntry("dummy-entry-4".getBytes(Encoding)); + Position pos10 = ledger.addEntry("dummy-entry-5".getBytes(Encoding)); - c1.delete(pos2); - c1.delete(pos4); + // Wait until a new ledger is created after the previous one has been closed. + // This happens because maxEntriesPerLedger is set to 5, so a new ledger is opened after every 5 entries. + Awaitility.await().untilAsserted(() -> { + assertTrue(ledger.getLedgersInfo().lastEntry().getKey() > pos10.getLedgerId()); + }); + + c1.delete(pos7); + c1.delete(pos9); c1.skipEntries(4, IndividualDeletedEntries.Include); assertEquals(c1.getNumberOfEntries(), 1); - assertEquals(c1.getReadPosition(), pos5); - assertEquals(c1.getMarkDeletedPosition(), pos4); + assertEquals(c1.getReadPosition(), pos10); + assertEquals(c1.getMarkDeletedPosition(), pos9); } @Test(timeOut = 20000, dataProvider = "useOpenRangeSet")
