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

curator git commit: CURATOR-190 - Modified to always use the base name when creating protected ephemeral nodes. This prevents the current protected name being appended to the name each time the node is created, which in turn prevents multiple nodes being

Repository: curator
Updated Branches:
  refs/heads/CURATOR-190 [created] 9fe802ec2


CURATOR-190 - Modified to always use the base name when creating protected
ephemeral nodes. This prevents the current protected name being appended
to the name each time the node is created, which in turn prevents multiple
nodes being created.


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

Branch: refs/heads/CURATOR-190
Commit: 9fe802ec238b8ae7b5f77e61cac7e25c8f42f6d9
Parents: 49eb02a
Author: Cameron McKenzie <ca...@unico.com.au>
Authored: Wed Mar 4 09:09:01 2015 +1100
Committer: Cameron McKenzie <ca...@unico.com.au>
Committed: Wed Mar 4 09:09:01 2015 +1100

----------------------------------------------------------------------
 .../recipes/nodes/PersistentEphemeralNode.java  |  2 +-
 .../nodes/TestPersistentEphemeralNode.java      | 39 ++++++++++++++++++++
 2 files changed, 40 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/9fe802ec/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java
index d78573c..cfc4cbc 100644
--- a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java
+++ b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java
@@ -336,7 +336,7 @@ public class PersistentEphemeralNode implements Closeable
         try
         {
             String existingPath = nodePath.get();
-            String createPath = (existingPath != null) ? existingPath : basePath;
+            String createPath = (existingPath != null && !mode.isProtected()) ? existingPath : basePath;
             createMethod.withMode(mode.getCreateMode(existingPath != null)).inBackground(backgroundCallback).forPath(createPath, data.get());
         }
         catch ( Exception e )

http://git-wip-us.apache.org/repos/asf/curator/blob/9fe802ec/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
index 47ae757..8bc8d3d 100644
--- a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
+++ b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
@@ -20,6 +20,7 @@ package org.apache.curator.framework.recipes.nodes;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Lists;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.framework.state.ConnectionState;
@@ -37,9 +38,11 @@ import org.apache.zookeeper.data.Stat;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
+
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
@@ -459,6 +462,42 @@ public class TestPersistentEphemeralNode extends BaseClassForTests
             node.close();
         }
     }
+    
+    /**
+     * See CURATOR-190
+     * For protected nodes on reconnect the current protected name was passed to the create builder meaning that it got
+     * appended to the new protected node name. This meant that a new node got created on each reconnect.
+     * @throws Exception
+     */
+    @Test
+    public void testProtected() throws Exception
+    {
+        CuratorFramework curator = newCurator();
+
+        PersistentEphemeralNode node = new PersistentEphemeralNode(curator, PersistentEphemeralNode.Mode.PROTECTED_EPHEMERAL, PATH,
+                                                                   new byte[0]);
+        node.start();
+        try
+        {
+            node.waitForInitialCreate(timing.forWaiting().seconds(), TimeUnit.SECONDS);
+            assertNodeExists(curator, node.getActualPath());
+
+            server.restart();            
+            
+            curator.blockUntilConnected(5, TimeUnit.SECONDS);
+
+            assertNodeExists(curator, node.getActualPath());
+            
+            //There should only be a single child, the persisted ephemeral node
+            List<String> children = curator.getChildren().forPath(DIR);
+            assertFalse(children == null);
+            assertEquals(children.size(), 1);
+        }
+        finally
+        {
+            node.close();
+        }
+    }
 
     private void assertNodeExists(CuratorFramework curator, String path) throws Exception
     {