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 32d46ff1c3c40..c05fd4908246a 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 int applyMaxSizeCap(int maxEntries, long maxSizeBytes) { 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 1cb09d995393c..90a5dadbef06e 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 void testEstimateEntryCountBySize() throws Exception { 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);