You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2014/08/08 03:58:44 UTC

[2/3] git commit: Fix startup connection problem.

Fix startup connection problem.


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

Branch: refs/heads/CURATOR-33
Commit: 462121f98a4129f9b96ff0a5ebeafe4eac224a38
Parents: be85e96
Author: Scott Blum <sc...@squareup.com>
Authored: Thu Aug 7 15:25:21 2014 -0400
Committer: Scott Blum <sc...@squareup.com>
Committed: Thu Aug 7 19:26:51 2014 -0400

----------------------------------------------------------------------
 .../framework/recipes/cache/TreeCache.java      | 22 ++++++++++++---
 .../recipes/cache/BaseTestTreeCache.java        |  4 +++
 .../framework/recipes/cache/TestTreeCache.java  | 28 ++++++++++++++++++++
 3 files changed, 51 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/462121f9/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
index 1ec0440..617d652 100644
--- a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
+++ b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
@@ -304,8 +304,11 @@ public class TreeCache implements Closeable
                 }
                 break;
             default:
-                handleException(new Exception(String.format("Unknown event %s", event)));
-                break;
+                // An unknown event, probably an error of some sort like connection loss.
+                LOG.info(String.format("Unknown event %s", event));
+                // Don't produce an initialized event on error; reconnect can fix this.
+                outstandingOps.decrementAndGet();
+                return;
             }
 
             if ( outstandingOps.decrementAndGet() == 0 )
@@ -424,7 +427,10 @@ public class TreeCache implements Closeable
     {
         Preconditions.checkState(treeState.compareAndSet(TreeState.LATENT, TreeState.STARTED), "already started");
         client.getConnectionStateListenable().addListener(connectionStateListener);
-        root.wasCreated();
+        if (client.getZookeeperClient().isConnected())
+        {
+            root.wasCreated();
+        }
     }
 
     /**
@@ -595,6 +601,16 @@ public class TreeCache implements Closeable
             break;
 
         case CONNECTED:
+            try
+            {
+                root.wasCreated();
+            }
+            catch ( Exception e )
+            {
+                handleException(e);
+            }
+            break;
+
         case RECONNECTED:
             try
             {

http://git-wip-us.apache.org/repos/asf/curator/blob/462121f9/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/BaseTestTreeCache.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/BaseTestTreeCache.java b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/BaseTestTreeCache.java
index 5842c21..1daf14d 100644
--- a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/BaseTestTreeCache.java
+++ b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/BaseTestTreeCache.java
@@ -85,6 +85,10 @@ public class BaseTestTreeCache extends BaseClassForTests
             }
         };
 
+        initCuratorFramework();
+    }
+
+    void initCuratorFramework() {
         client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
         client.start();
         client.getUnhandledErrorListenable().addListener(new UnhandledErrorListener()

http://git-wip-us.apache.org/repos/asf/curator/blob/462121f9/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestTreeCache.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestTreeCache.java b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestTreeCache.java
index 33d08b0..abdbb8b 100644
--- a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestTreeCache.java
+++ b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestTreeCache.java
@@ -342,4 +342,32 @@ public class TestTreeCache extends BaseTestTreeCache
         client.delete().forPath("/test/one");
         assertNoMoreEvents();
     }
+
+    /**
+     * Make sure TreeCache gets to a sane state when we can't initially connect to server.
+     */
+    @Test
+    public void testServerNotStartedYet() throws Exception
+    {
+        // Stop the existing server.
+        server.stop();
+
+        // Shutdown the existing client and re-create it started.
+        client.close();
+        initCuratorFramework();
+
+        // Start the client disconnected.
+        cache = new MyTreeCache(client, "/test", true);
+        cache.start();
+        assertNoMoreEvents();
+
+        // Now restart the server.
+        server.restart();
+        assertEvent(TreeCacheEvent.Type.INITIALIZED);
+
+        client.create().forPath("/test");
+
+        assertEvent(TreeCacheEvent.Type.NODE_ADDED, "/test");
+        assertNoMoreEvents();
+    }
 }