From 9ddafdf16bc7b24cc2db12a0a1aabff1e66958ac Mon Sep 17 00:00:00 2001 From: Aloys Date: Tue, 8 Sep 2020 10:12:00 +0800 Subject: [PATCH] update from zookeeper for available broker one more time if availableBrokers is empty (#7975) Fixes #7476 ### Motivation In some situations, discovery service can't find active broker while all brokers are running well. This PR will update from zookeeper if available broker list is empty to avoid "No active broker is available" `RestException` happen. ### Modifications double check from zookeeper if availableBrokers is empty --- .../discovery/service/web/ZookeeperCacheLoader.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/web/ZookeeperCacheLoader.java b/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/web/ZookeeperCacheLoader.java index e1a2cd7927b..1a6944a2cc6 100644 --- a/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/web/ZookeeperCacheLoader.java +++ b/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/web/ZookeeperCacheLoader.java @@ -28,6 +28,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import org.apache.bookkeeper.common.util.OrderedScheduler; +import org.apache.commons.collections4.CollectionUtils; import org.apache.pulsar.common.util.FutureUtil; import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.policies.data.loadbalancer.LoadManagerReport; @@ -124,6 +125,13 @@ public class ZookeeperCacheLoader implements Closeable { } public List getAvailableBrokers() { + if (CollectionUtils.isEmpty(availableBrokers)) { + try { + updateBrokerList(availableBrokersCache.get()); + } catch (Exception e) { + log.warn("Error updating broker from zookeeper.", e); + } + } return availableBrokers; } -- GitLab