From 5be6980aafd146abc104dc77d5d00642ccc2a14c Mon Sep 17 00:00:00 2001 From: fengyubiao Date: Thu, 6 Feb 2025 12:31:32 +0800 Subject: [PATCH] add test --- .../mledger/impl/ManagedCursorImpl.java | 14 +++++++------- .../mledger/impl/ManagedCursorTest.java | 18 +++++++++--------- 2 files changed, 16 insertions(+), 16 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 1477d6e09981f..86aab6152f6b8 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 @@ -3815,7 +3815,7 @@ public int applyMaxSizeCap(int maxEntries, long maxSizeBytes) { return Math.min(maxEntriesBasedOnSize, maxEntries); } - private static long estimateEntryCountBySize(long bytesSize, Position readPosition, ManagedLedgerImpl ml) { + static long estimateEntryCountBySize(long bytesSize, Position readPosition, ManagedLedgerImpl ml) { Position posToRead = readPosition; if (!ml.isValidPosition(readPosition)) { posToRead = ml.getNextValidPosition(readPosition); @@ -3825,12 +3825,12 @@ private static long estimateEntryCountBySize(long bytesSize, Position readPositi while (remainingBytesSize > 0) { // Last ledger. - if (posToRead.getLedgerId() == ml.currentLedger.getId()) { - if (ml.currentLedgerSize == 0 || ml.currentLedgerEntries == 0) { + if (posToRead.getLedgerId() == ml.getCurrentLedger().getId()) { + if (ml.getCurrentLedgerSize() == 0 || ml.getCurrentLedgerEntries() == 0) { // Only read 1 entry if no entries to read. return 1; } - long avg = Math.max(1, ml.currentLedgerSize / ml.currentLedgerEntries); + long avg = Math.max(1, ml.getCurrentLedgerSize() / ml.getCurrentLedgerEntries()); result += remainingBytesSize / avg; break; } @@ -3842,14 +3842,14 @@ private static long estimateEntryCountBySize(long bytesSize, Position readPositi } // Calculate entries by average of ledgers. long avg = Math.max(1, ledgerInfo.getSize() / ledgerInfo.getEntries()); - long remainEntriesOfLedger = ledgerInfo.getEntries() - posToRead.getEntryId() + 1; + long remainEntriesOfLedger = ledgerInfo.getEntries() - posToRead.getEntryId(); if (remainEntriesOfLedger * avg >= remainingBytesSize) { result += remainingBytesSize / avg; break; } else { // Calculate for the next ledger. - result += remainEntriesOfLedger / avg; - remainingBytesSize -= remainEntriesOfLedger; + result += remainEntriesOfLedger; + remainingBytesSize -= remainEntriesOfLedger * avg; posToRead = ml.getNextValidPosition(PositionFactory.create(posToRead.getLedgerId(), Long.MAX_VALUE)); } } 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 f4c381dad0b6d..023f3d96da390 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 @@ -5169,8 +5169,9 @@ public void testEstimateEntryCountBySize() throws Exception { final String mlName = "ml-" + UUID.randomUUID().toString().replaceAll("-", ""); ManagedLedgerImpl ml = (ManagedLedgerImpl) factory.open(mlName); // Verify: no entry to read + long entryCount0 = - ManagedCursorImpl.estimateEntryCountBySize(16, PositionFactory.create(ml.currentLedger.getId(), 0), ml); + ManagedCursorImpl.estimateEntryCountBySize(16, PositionFactory.create(ml.getCurrentLedger().getId(), 0), ml); assertEquals(entryCount0, 1); // Avoid trimming ledgers. ml.openCursor("c1"); @@ -5179,19 +5180,19 @@ public void testEstimateEntryCountBySize() throws Exception { for (int i = 0; i < 100; i++) { ml.addEntry(new byte[]{1}); } - long ledger1 = ml.currentLedger.getId(); - ml.currentLedger.close(); - ml.ledgerClosed(ml.currentLedger); + long ledger1 = ml.getCurrentLedger().getId(); + ml.getCurrentLedger().close(); + ml.ledgerClosed(ml.getCurrentLedger()); for (int i = 0; i < 100; i++) { ml.addEntry(new byte[]{1, 2}); } - long ledger2 = ml.currentLedger.getId(); - ml.currentLedger.close(); - ml.ledgerClosed(ml.currentLedger); + long ledger2 = ml.getCurrentLedger().getId(); + ml.getCurrentLedger().close(); + ml.ledgerClosed(ml.getCurrentLedger()); for (int i = 0; i < 100; i++) { ml.addEntry(new byte[]{1, 2, 3, 4}); } - long ledger3 = ml.currentLedger.getId(); + long ledger3 = ml.getCurrentLedger().getId(); MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo1 = ml.getLedgersInfo().get(ledger1); MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo2 = ml.getLedgersInfo().get(ledger2); long average1 = ledgerInfo1.getSize() / ledgerInfo1.getEntries(); @@ -5233,7 +5234,6 @@ public void testEstimateEntryCountBySize() throws Exception { ManagedCursorImpl.estimateEntryCountBySize(236, PositionFactory.create(ledger1, 80), ml); assertEquals(entryCount9, 124); - // cleanup. ml.delete(); }