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 1e8e7fd7ea851..7658ea742a1c8 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 @@ -1322,22 +1322,7 @@ public void operationComplete(Void v, Stat stat) { @Override public void operationFailed(MetaStoreException e) { - if (e instanceof BadVersionException) { - synchronized (ManagedLedgerImpl.this) { - log.error( - "[{}] Failed to update ledger list. z-node version mismatch. Closing managed ledger", - name); - STATE_UPDATER.set(ManagedLedgerImpl.this, State.Fenced); - // Return ManagedLedgerFencedException to addFailed callback - // to indicate that the ledger is now fenced and topic needs to be closed - clearPendingAddEntries(new ManagedLedgerFencedException(e)); - // Do not need to unlock ledgersListMutex here because we are going to close to topic anyways - return; - } - } - log.warn("[{}] Error updating meta data with the new list of ledgers: {}", name, e.getMessage()); - // Remove the ledger, since we failed to update the list ledgers.remove(lh.getId()); mbean.startDataLedgerDeleteOp(); @@ -1349,6 +1334,21 @@ public void operationFailed(MetaStoreException e) { } }, null); + if (e instanceof BadVersionException) { + synchronized (ManagedLedgerImpl.this) { + log.error( + "[{}] Failed to update ledger list. z-node version mismatch. Closing managed ledger", + name); + lastLedgerCreationFailureTimestamp = clock.millis(); + STATE_UPDATER.set(ManagedLedgerImpl.this, State.Fenced); + // Return ManagedLedgerFencedException to addFailed callback + // to indicate that the ledger is now fenced and topic needs to be closed + clearPendingAddEntries(new ManagedLedgerFencedException(e)); + // Do not need to unlock ledgersListMutex here because we are going to close to topic anyways + return; + } + } + metadataMutex.unlock(); synchronized (ManagedLedgerImpl.this) {