Repository: curator
Updated Branches:
  refs/heads/CURATOR-175 [created] 7a97315dd


If zookeeper is down when discovery is started, it fails to register
when the zookeeper comes up for the first time. This commit has fix for
this issue

Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/4190147d
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/4190147d
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/4190147d

Branch: refs/heads/CURATOR-175
Commit: 4190147dbedb350ce1d42eb1ace86de0d0c9aef9
Parents: ef2ca57
Author: gopi <gopi.k...@gmail.com>
Authored: Sun Dec 28 19:23:26 2014 +0530
Committer: gopi <gopi.k...@gmail.com>
Committed: Sun Dec 28 19:23:26 2014 +0530

----------------------------------------------------------------------
 .../discovery/details/ServiceDiscoveryImpl.java |  8 +++--
 .../x/discovery/TestServiceDiscovery.java       | 35 ++++++++++++++++++++
 2 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/4190147d/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
 
b/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
index ad6ce89..5f001a1 100644
--- 
a/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
+++ 
b/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
@@ -69,7 +69,7 @@ public class ServiceDiscoveryImpl<T> implements 
ServiceDiscovery<T>
         @Override
         public void stateChanged(CuratorFramework client, ConnectionState 
newState)
         {
-            if ( newState == ConnectionState.RECONNECTED )
+            if ( newState == ConnectionState.RECONNECTED || newState == 
ConnectionState.CONNECTED )
             {
                 try
                 {
@@ -109,8 +109,12 @@ public class ServiceDiscoveryImpl<T> implements 
ServiceDiscovery<T>
     @Override
     public void start() throws Exception
     {
+        try {
+           reRegisterServices();
+        } catch (Exception ex) {
+            log.error("Could not register instances", ex);
+        }
         
client.getConnectionStateListenable().addListener(connectionStateListener);
-        reRegisterServices();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/curator/blob/4190147d/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/TestServiceDiscovery.java
----------------------------------------------------------------------
diff --git 
a/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/TestServiceDiscovery.java
 
b/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/TestServiceDiscovery.java
index 73de7fc..a9a8896 100644
--- 
a/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/TestServiceDiscovery.java
+++ 
b/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/TestServiceDiscovery.java
@@ -24,6 +24,7 @@ import org.apache.curator.test.BaseClassForTests;
 import org.apache.curator.utils.CloseableUtils;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.retry.RetryNTimes;
 import org.apache.curator.retry.RetryOneTime;
 import org.apache.curator.test.KillSession;
 import org.apache.curator.test.Timing;
@@ -263,4 +264,38 @@ public class TestServiceDiscovery extends BaseClassForTests
             }
         }
     }
+    
+    @Test
+    public void         testNoServerOnStart() throws Exception
+    {
+        server.stop();
+        List<Closeable>     closeables = Lists.newArrayList();
+        try
+        {
+            CuratorFramework client = 
CuratorFrameworkFactory.newClient(server.getConnectString(), new 
RetryNTimes(0,1000));
+            closeables.add(client);
+            client.start();
+            
+            ServiceInstance<String>     instance = 
ServiceInstance.<String>builder().payload("thing").name("test").port(10064).build();
+            ServiceDiscovery<String>    discovery = 
ServiceDiscoveryBuilder.builder(String.class).basePath("/test").client(client).thisInstance(instance).build();
+            closeables.add(discovery);
+            discovery.start();
+
+            server.restart();
+            Assert.assertEquals(discovery.queryForNames(), 
Arrays.asList("test"));
+
+            List<ServiceInstance<String>> list = Lists.newArrayList();
+            list.add(instance);
+            Assert.assertEquals(discovery.queryForInstances("test"), list);
+        }
+        finally
+        {
+            Collections.reverse(closeables);
+            for ( Closeable c : closeables )
+            {
+                CloseableUtils.closeQuietly(c);
+            }
+        }
+    }
+
 }

Reply via email to