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

rgao 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 23fca3d6bd7 [fix] Avoid negative estimated entry count (#24055)
23fca3d6bd7 is described below

commit 23fca3d6bd72cefddb5db6587d8bee02cd87a225
Author: ran <r...@streamnative.io>
AuthorDate: Fri Mar 7 12:58:34 2025 +0800

    [fix] Avoid negative estimated entry count (#24055)
    
    (cherry picked from commit 49f623619fe30eb16b749e6cbebe2812d0a1bcea)
---
 .../org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java  |  8 +++++---
 .../org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java  | 10 ++++++++++
 2 files changed, 15 insertions(+), 3 deletions(-)

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 32d46ff1c3c..c05fd490824 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
@@ -3811,9 +3811,11 @@ public class ManagedCursorImpl implements ManagedCursor {
         if (maxSizeBytes == NO_MAX_SIZE_LIMIT) {
             return maxEntries;
         }
-        int maxEntriesBasedOnSize =
-                Long.valueOf(estimateEntryCountBySize(maxSizeBytes, 
readPosition, ledger)).intValue();
-        return Math.min(maxEntriesBasedOnSize, maxEntries);
+        long estimatedEntryCount = estimateEntryCountBySize(maxSizeBytes, 
readPosition, ledger);
+        if (estimatedEntryCount > Integer.MAX_VALUE) {
+            return maxEntries;
+        }
+        return Math.min((int) estimatedEntryCount, maxEntries);
     }
 
     static long estimateEntryCountBySize(long bytesSize, Position 
readPosition, ManagedLedgerImpl ml) {
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 1cb09d99539..90a5dadbef0 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
@@ -5246,6 +5246,16 @@ public class ManagedCursorTest extends 
MockedBookKeeperTestCase {
         ml.delete();
     }
 
+    @Test
+    public void testApplyMaxSizeCap() throws Exception {
+        var ml = factory.open("testApplyMaxSizeCap");
+        var cursor = ml.openCursor("c1");
+        ml.addEntry(new byte[1000]);
+        assertEquals(cursor.applyMaxSizeCap(200, Long.MAX_VALUE), 200);
+        ml.deleteCursor("c1");
+        ml.delete();
+    }
+
     @Test
     void testForceCursorRecovery() throws Exception {
         TestPulsarMockBookKeeper bk = new TestPulsarMockBookKeeper(executor);

Reply via email to