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 c76d532092608..665b1388ff626 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 @@ -137,6 +137,7 @@ public void failed(ManagedLedgerException e) { ReferenceCountUtil.release(data); cb.addFailed(e, ctx); ml.mbean.recordAddEntryError(); + this.recycle(); } } @@ -179,7 +180,13 @@ public void addComplete(int rc, final LedgerHandle lh, long entryId, Object ctx) public void safeRun() { // Remove this entry from the head of the pending queue OpAddEntry firstInQueue = ml.pendingAddEntries.poll(); - checkArgument(this == firstInQueue); + if (firstInQueue == null) { + return; + } + if (this != firstInQueue) { + firstInQueue.failed(new ManagedLedgerException("Unexpected add entry op when complete the add entry op.")); + return; + } ManagedLedgerImpl.NUMBER_OF_ENTRIES_UPDATER.incrementAndGet(ml); ManagedLedgerImpl.TOTAL_SIZE_UPDATER.addAndGet(ml, dataLength);