Skip to content

Commit

Permalink
fix bug in getNumberOfEntriesInStorage (apache#15627)
Browse files Browse the repository at this point in the history
(cherry picked from commit a439811)
(cherry picked from commit 155d60c)
  • Loading branch information
HQebupt authored and nicoloboschi committed Jun 7, 2022
1 parent 28b5628 commit f86ac75
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -963,7 +963,7 @@ public long getNumberOfEntriesInBacklog(boolean isPrecise) {
}

public long getNumberOfEntriesInStorage() {
return ledger.getNumberOfEntries(Range.openClosed(markDeletePosition, ledger.getLastPosition().getNext()));
return ledger.getNumberOfEntries(Range.openClosed(markDeletePosition, ledger.getLastPosition()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2188,6 +2188,35 @@ public void testGetPositionAfterN() throws Exception {
assertEquals(targetPosition.getEntryId(), 4);
}

@Test
public void testGetNumberOfEntriesInStorage() throws Exception {
ManagedLedgerConfig managedLedgerConfig = new ManagedLedgerConfig();
managedLedgerConfig.setMaxEntriesPerLedger(5);
ManagedLedgerImpl managedLedger =
(ManagedLedgerImpl) factory.open("testGetNumberOfEntriesInStorage", managedLedgerConfig);
// open cursor to prevent ledger to be deleted when ledger rollover
ManagedCursorImpl managedCursor = (ManagedCursorImpl) managedLedger.openCursor("cursor");
int numberOfEntries = 10;
for (int i = 0; i < numberOfEntries; i++) {
managedLedger.addEntry(("entry-" + i).getBytes(Encoding));
}

//trigger ledger rollover and wait for the new ledger created
Field stateUpdater = ManagedLedgerImpl.class.getDeclaredField("state");
stateUpdater.setAccessible(true);
stateUpdater.set(managedLedger, ManagedLedgerImpl.State.LedgerOpened);
managedLedger.rollCurrentLedgerIfFull();
Awaitility.await().untilAsserted(() -> {
assertEquals(managedLedger.getLedgersInfo().size(), 2);
assertEquals(managedLedger.getState(), ManagedLedgerImpl.State.ClosedLedger);
});
assertEquals(5, managedLedger.getLedgersInfoAsList().get(0).getEntries());
assertEquals(5, managedLedger.getLedgersInfoAsList().get(1).getEntries());
log.info("### ledgers {}", managedLedger.getLedgersInfo());
long length = managedCursor.getNumberOfEntriesInStorage();
assertEquals(length, numberOfEntries);
}

@Test
public void testEstimatedBacklogSize() throws Exception {
ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("testEstimatedBacklogSize");
Expand Down

0 comments on commit f86ac75

Please sign in to comment.