This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 9cbfc1de1df [fix][broker]Incorrect backlog that is larger than 
expected (#25037)
9cbfc1de1df is described below

commit 9cbfc1de1dfe311306fe34a7eea4e0a992e29977
Author: fengyubiao <[email protected]>
AuthorDate: Fri Dec 5 04:30:21 2025 +0800

    [fix][broker]Incorrect backlog that is larger than expected (#25037)
---
 .../org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java  |  9 +++++----
 .../org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java  | 10 ++++++----
 2 files changed, 11 insertions(+), 8 deletions(-)

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 1f45f755586..ec1f2801aa3 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
@@ -3950,6 +3950,7 @@ public class ManagedLedgerImpl implements ManagedLedger, 
CreateCallback {
             // than the LAC.
             // To support this case, use "Long.MAX_VALUE" if the ledger is the 
last one.
             long entriesInLedger = comparePositions(toPosition, 
lastConfirmedEntry) >= 0
+                    || toPosition.getLedgerId() == 
lastConfirmedEntry.getLedgerId()
                     ? Long.MAX_VALUE : toLedger.getEntries();
             count += Math.min(toPosition.getEntryId(), entriesInLedger - 1);
             count += toIncluded ? 1 : 0;
@@ -3958,12 +3959,12 @@ public class ManagedLedgerImpl implements 
ManagedLedger, CreateCallback {
         // 2. Add the entries in the ledger pointed by fromPosition.
         //    Add nothing if "toPosition.entryId < 0".
         //    Add nothing if "toPosition" does not exit in "ledgers".
-        LedgerInfo formLedger = ledgers.get(fromPosition.getLedgerId());
-        if (formLedger != null) {
+        LedgerInfo fromLedger = ledgers.get(fromPosition.getLedgerId());
+        if (fromLedger != null) {
             if (fromPosition.getEntryId() < 0) {
-                count += formLedger.getEntries();
+                count += fromLedger.getEntries();
             } else {
-                count += formLedger.getEntries() - (fromPosition.getEntryId() 
+ 1);
+                count += fromLedger.getEntries() - (fromPosition.getEntryId() 
+ 1);
                 count += fromIncluded ? 1 : 0;
             }
         }
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 9216bd60ed4..66553fe117b 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
@@ -4823,13 +4823,15 @@ public class ManagedLedgerTest extends 
MockedBookKeeperTestCase {
         assertEquals(ml.getNumberOfEntries(range26), 29);
 
         // Normal case: end with current ledger.
-        Range<Position> range27 = Range.closed(positions.get(0), 
positions.get(34));
-        assertEquals(ml.getNumberOfEntries(range27), 35);
+        Range<Position> range27 = Range.closed(positions.get(0), 
positions.get(31));
+        assertEquals(ml.getNumberOfEntries(range27), 32);
+        Range<Position> range28 = Range.closed(positions.get(0), 
positions.get(34));
+        assertEquals(ml.getNumberOfEntries(range28), 35);
         // Cover the following case.
         // The use case "cursor.getNumberOfEntries()", which will use a 
"toPosition" that with an entry
         // id that is larger than the LAC.
-        Range<Position> range28 = Range.closed(positions.get(0), 
PositionFactory.create(ledger4.getLedgerId(), 100));
-        assertEquals(ml.getNumberOfEntries(range28), 131);
+        Range<Position> range29 = Range.closed(positions.get(0), 
PositionFactory.create(ledger4.getLedgerId(), 100));
+        assertEquals(ml.getNumberOfEntries(range29), 131);
 
         // From position that entry id is "-1" & positions in the same ledger.
         Range<Position> range31 = 
Range.closed(PositionFactory.create(ledger1.getLedgerId(), -1),

Reply via email to