michaeljmarshall commented on a change in pull request #11737:
URL: https://github.com/apache/pulsar/pull/11737#discussion_r694141533



##########
File path: 
managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java
##########
@@ -179,7 +179,18 @@ 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) {
+            // The pending op might been polled by others such as cleanup 
pending op when create Ledger failed.
+            ReferenceCountUtil.release(data);
+            this.recycle();
+            return;
+        }
+        if (this != firstInQueue) {
+            firstInQueue.failed(new ManagedLedgerException("Unexpected add 
entry op when complete the add entry op."));
+            ReferenceCountUtil.release(data);
+            this.recycle();
+            return;
+        }

Review comment:
       +1. @codelipenghui, can you explain why we call `firstInQueue.failed` 
and then release `this.data` and call `this.recycle()` without also calling 
`this.failed`? Note that the `failed` method has concurrency controls built in 
by using the `callbackUpdater`. Wouldn't we want to use those concurrency 
controls here as well?
   
   ```java
       public void failed(ManagedLedgerException e) {
           AddEntryCallback cb = callbackUpdater.getAndSet(this, null);
           if (cb != null) {
               ReferenceCountUtil.release(data);
               cb.addFailed(e, ctx);
               ml.mbean.recordAddEntryError();
           }
       }
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pulsar.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to