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 3419578f01322..4cb554c6651b7 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 @@ -1584,6 +1584,12 @@ synchronized void ledgerClosed(final LedgerHandle lh) { if (!pendingAddEntries.isEmpty()) { // Need to create a new ledger to write pending entries + createLedgerAfterClosed(); + } + } + + synchronized void createLedgerAfterClosed() { + if(isNeededCreateNewLedgerAfterCloseLedger()) { log.info("[{}] Creating a new ledger", name); STATE_UPDATER.set(this, State.CreatingLedger); this.lastLedgerCreationInitiationTimestamp = System.currentTimeMillis(); @@ -1592,11 +1598,12 @@ synchronized void ledgerClosed(final LedgerHandle lh) { } } - synchronized void createLedgerAfterClosed() { - STATE_UPDATER.set(this, State.CreatingLedger); - this.lastLedgerCreationInitiationTimestamp = System.currentTimeMillis(); - mbean.startDataLedgerCreateOp(); - asyncCreateLedger(bookKeeper, config, digestType, this, Collections.emptyMap()); + boolean isNeededCreateNewLedgerAfterCloseLedger() { + final State state = STATE_UPDATER.get(this); + if (state != State.CreatingLedger && state != State.LedgerOpened) { + return true; + } + return false; } @VisibleForTesting