From c07764f03d2f77197ff72fe8734756637a4079ad Mon Sep 17 00:00:00 2001 From: lipenghui Date: Fri, 14 Jan 2022 17:47:13 +0800 Subject: [PATCH] Fix the deadlock while using zookeeper thread to create ledger (#13744) ### Motivation Fixes: #13736, the deadlock when using ZK thread to create a ledger. ### Modification Use the executor of the managed ledger to create the ledger to avoid the deadlock. (cherry picked from commit 1d4c374d9a87e5188c8b64677b8c6bea652a2d2a) --- .../apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 457600ccf1630..528816047b709 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 @@ -1593,7 +1593,10 @@ synchronized void createLedgerAfterClosed() { STATE_UPDATER.set(this, State.CreatingLedger); this.lastLedgerCreationInitiationTimestamp = System.currentTimeMillis(); mbean.startDataLedgerCreateOp(); - asyncCreateLedger(bookKeeper, config, digestType, this, Collections.emptyMap()); + // Use the executor here is to avoid use the Zookeeper thread to create the ledger which will lead + // to deadlock at the zookeeper client, details to see https://github.com/apache/pulsar/issues/13736 + this.executor.execute(() -> + asyncCreateLedger(bookKeeper, config, digestType, this, Collections.emptyMap())); } }