diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java index 64efa85e4c98a..57c4e62b33250 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java @@ -652,7 +652,15 @@ public boolean hasMoreEntries() { @Override public long getNumberOfEntries() { - return getNumberOfEntries(Range.closedOpen(readPosition, ledger.getLastPosition().getNext())); + if (readPosition.compareTo(ledger.getLastPosition().getNext()) > 0) { + if (log.isDebugEnabled()) { + log.debug("[{}] [{}] Read position {} is ahead of last position {}. There are no entries to read", + ledger.getName(), name, readPosition, ledger.getLastPosition()); + } + return 0; + } else { + return getNumberOfEntries(Range.closedOpen(readPosition, ledger.getLastPosition().getNext())); + } } @Override 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 77d6c6c67669c..d8c48ded3b448 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 @@ -2759,6 +2759,7 @@ public Object answer(InvocationOnMock invocation) { public void operationComplete() { assertEquals(cursor.getMarkDeletedPosition(), lastPosition); assertEquals(cursor.getReadPosition(), nextPosition); + assertEquals(cursor.getNumberOfEntries(), 0L); } @Override