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

technoboy pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


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

commit 587031e6ddf94a586399cadb03dad5e999a82daf
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 eb023f4c2df..0bd5659f45c 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
@@ -3803,6 +3803,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;
@@ -3811,12 +3812,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 3be3e6af61a..1d557ef1f28 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
@@ -4682,13 +4682,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