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

victory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 77a69e0  issue#4314: ZookeeperDynamicConfiguration will be busy wait 
if zk is unavailable (#4582)
77a69e0 is described below

commit 77a69e0da9ea972b5b66da300e6c4116b75a9347
Author: Ian Luo <[email protected]>
AuthorDate: Wed Jul 17 09:50:38 2019 +0800

    issue#4314: ZookeeperDynamicConfiguration will be busy wait if zk is 
unavailable (#4582)
    
    * issue#4314: ZookeeperDynamicConfiguration will be busy wait if zk is 
unavailable
    * fix logic issue
---
 .../support/zookeeper/ZookeeperDynamicConfiguration.java          | 8 +++++++-
 .../dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java  | 4 +++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
 
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
index a06537b..e52a24e 100644
--- 
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
+++ 
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
 
@@ -61,7 +62,12 @@ public class ZookeeperDynamicConfiguration implements 
DynamicConfiguration {
         zkClient.addDataListener(rootPath, cacheListener, executor);
         try {
             // Wait for connection
-            this.initializedLatch.await();
+            long timeout = url.getParameter("init.timeout", 5000);
+            boolean isCountDown = this.initializedLatch.await(timeout, 
TimeUnit.MILLISECONDS);
+            if (!isCountDown) {
+                throw new IllegalStateException("Failed to receive INITIALIZED 
event from zookeeper, pls. check if url "
+                        + url + " is correct");
+            }
         } catch (InterruptedException e) {
             logger.warn("Failed to build local cache for config center 
(zookeeper)." + url);
         }
diff --git 
a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java
 
b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java
index b14cd11..b20f4ae 100644
--- 
a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java
+++ 
b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClient.java
@@ -227,12 +227,14 @@ public class CuratorZookeeperClient extends 
AbstractZookeeperClient<CuratorZooke
         try {
             TreeCache treeCache = TreeCache.newBuilder(client, 
path).setCacheData(false).build();
             treeCacheMap.putIfAbsent(path, treeCache);
-            treeCache.start();
+
             if (executor == null) {
                 treeCache.getListenable().addListener(treeCacheListener);
             } else {
                 treeCache.getListenable().addListener(treeCacheListener, 
executor);
             }
+
+            treeCache.start();
         } catch (Exception e) {
             throw new IllegalStateException("Add treeCache listener for path:" 
+ path, e);
         }

Reply via email to