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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 467699ff37b [fix][meta] Fix deadlock in AutoRecovery. (#21010)
467699ff37b is described below

commit 467699ff37b147c7ec74d00bff27a2ed19563ab5
Author: Yan Zhao <[email protected]>
AuthorDate: Mon Aug 21 09:41:50 2023 +0800

    [fix][meta] Fix deadlock in AutoRecovery. (#21010)
---
 .../bookkeeper/PulsarLedgerUnderreplicationManager.java    | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git 
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
 
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
index cf8ff208c94..79fdc44cb2b 100644
--- 
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
+++ 
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
@@ -978,11 +978,13 @@ public class PulsarLedgerUnderreplicationManager 
implements LedgerUnderreplicati
     @Override
     public void 
notifyUnderReplicationLedgerChanged(BookkeeperInternalCallbacks.GenericCallback<Void>
 cb)
             throws ReplicationException.UnavailableException {
-        log.debug("notifyUnderReplicationLedgerChanged()");
-        store.registerListener(e -> {
-            if (e.getType() == NotificationType.Deleted && 
ID_EXTRACTION_PATTERN.matcher(e.getPath()).find()) {
-                cb.operationComplete(0, null);
-            }
-        });
+        //The store listener callback executor is metadata-store executor,
+        //in cb.operationComplete(0, null), it will get all underreplication 
ledgers from metadata-store, it's sync
+        //operation. So it's a deadlock.
+//        store.registerListener(e -> {
+//            if (e.getType() == NotificationType.Deleted && 
ID_EXTRACTION_PATTERN.matcher(e.getPath()).find()) {
+//                cb.operationComplete(0, null);
+//            }
+//        });
     }
 }

Reply via email to