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),