You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ch...@apache.org on 2021/11/04 11:18:55 UTC

[pulsar] 07/14: [ML] Add OpAddEntry to pendingAddEntries after the state check (#12570)

This is an automated email from the ASF dual-hosted git repository.

chenhang pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit aca2a7ba4e663ccdc3cfdb75262da4ed8bc00ee8
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Tue Nov 2 06:00:33 2021 +0200

    [ML] Add OpAddEntry to pendingAddEntries after the state check (#12570)
    
    - when the state was Fenced, Terminated or Closed, the OpAddEntry
      instance would remain in pendingAddEntries although the operation is failed
      immediately.
    
    (cherry picked from commit 409239ce27d7d5f9800c5d09e0455ad4c5c0871c)
---
 .../java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java     | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
index 52cae3e..126acdb 100644
--- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
+++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
@@ -721,7 +721,6 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
         if (!beforeAddEntry(addOperation)) {
             return;
         }
-        pendingAddEntries.add(addOperation);
         final State state = STATE_UPDATER.get(this);
         if (state == State.Fenced) {
             addOperation.failed(new ManagedLedgerFencedException());
@@ -733,10 +732,10 @@ public class ManagedLedgerImpl implements ManagedLedger, CreateCallback {
             addOperation.failed(new ManagedLedgerAlreadyClosedException("Managed ledger was already closed"));
             return;
         } else if (state == State.WriteFailed) {
-            pendingAddEntries.remove(addOperation);
             addOperation.failed(new ManagedLedgerAlreadyClosedException("Waiting to recover from failure"));
             return;
         }
+        pendingAddEntries.add(addOperation);
 
         if (state == State.ClosingLedger || state == State.CreatingLedger) {
             // We don't have a ready ledger to write into