This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch branch-2.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.3 by this push:
new 7a6f2cc Fix deadlock during GC of non-persistent topic (#4003)
7a6f2cc is described below
commit 7a6f2cca0fdb01e4a1ea1c72d907217a13af8ff1
Author: massakam <[email protected]>
AuthorDate: Tue Apr 9 06:21:02 2019 +0900
Fix deadlock during GC of non-persistent topic (#4003)
---
.../broker/service/nonpersistent/NonPersistentTopic.java | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
index bd60d95..b0cbf1c 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
@@ -465,9 +465,13 @@ public class NonPersistentTopic implements Topic {
isFenced = false;
deleteFuture.completeExceptionally(ex);
} else {
- brokerService.removeTopicFromCache(topic);
- log.info("[{}] Topic deleted", topic);
- deleteFuture.complete(null);
+ // topic GC iterates over topics map and removing
from the map with the same thread creates
+ // deadlock. so, execute it in different thread
+ brokerService.executor().execute(() -> {
+ brokerService.removeTopicFromCache(topic);
+ log.info("[{}] Topic deleted", topic);
+ deleteFuture.complete(null);
+ });
}
});
} else {