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.
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 04bfd71..a035e0e 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
@@ -1638,7 +1638,10 @@
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()));
}
}