This is an automated email from the ASF dual-hosted git repository. lhotari 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 c1c1b21f3df [fix][broker] Fix duplicate increment of ADD_OP_COUNT_UPDATER in OpAddEntry (#24506) c1c1b21f3df is described below commit c1c1b21f3df1ff12c35b8cf333fe8dad302facbe Author: Ruimin MA <maruimin...@gmail.com> AuthorDate: Wed Jul 23 16:46:39 2025 +0800 [fix][broker] Fix duplicate increment of ADD_OP_COUNT_UPDATER in OpAddEntry (#24506) Co-authored-by: crossoverJie <crossover...@gmail.com> (cherry picked from commit 39ac65a58e94e9d4621054e60b9dcb8241d27ff3) --- .../apache/bookkeeper/mledger/impl/OpAddEntry.java | 1 - .../bookkeeper/mledger/impl/ManagedLedgerTest.java | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java index e0d35ce4e91..c481139d0cc 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java @@ -135,7 +135,6 @@ public class OpAddEntry implements AddCallback, CloseCallback, Runnable, Managed ByteBuf duplicateBuffer = data.retainedDuplicate(); // internally asyncAddEntry() will take the ownership of the buffer and release it at the end - addOpCount = ManagedLedgerImpl.ADD_OP_COUNT_UPDATER.incrementAndGet(ml); lastInitTime = System.nanoTime(); if (ml.getManagedLedgerInterceptor() != null) { long originalDataLen = data.readableBytes(); 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 6f5e409aff4..23095ac1a86 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 @@ -3318,6 +3318,25 @@ public class ManagedLedgerTest extends MockedBookKeeperTestCase { setFieldValue(ManagedLedgerImpl.class, ledger, "currentLedger", null); } + @Test + public void testAddOpCountWithMessageAdd() throws Exception { + ManagedLedgerFactoryConfig config = new ManagedLedgerFactoryConfig(); + config.setMaxCacheSize(0); + + @Cleanup("shutdown") + ManagedLedgerFactoryImpl factory = new ManagedLedgerFactoryImpl(metadataStore, bkc, config); + ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("my_test_ledger"); + + for (int i = 0; i < 10; i++) { + OpAddEntry op = OpAddEntry.createNoRetainBuffer(ledger, + ByteBufAllocator.DEFAULT.buffer(128), null, null, new AtomicBoolean()); + ledger.internalAsyncAddEntry(op); + long addOpCount = ManagedLedgerImpl.ADD_OP_COUNT_UPDATER.get(ledger); + Assert.assertEquals(i + 1, addOpCount); + } + } + + @Test public void avoidUseSameOpAddEntryBetweenDifferentLedger() throws Exception { ManagedLedgerFactoryConfig config = new ManagedLedgerFactoryConfig();