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/04/22 01:09:14 UTC

[2/2] curator git commit: Merge branch 'master' into CURATOR-154

Merge branch 'master' into CURATOR-154

Conflicts:
	curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java


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

Branch: refs/heads/master
Commit: 6e16d0d5c35fa02b6976037d230a0e25e25d7572
Parents: 64973b0 c65e091
Author: Cameron McKenzie <ca...@unico.com.au>
Authored: Wed Apr 22 09:06:29 2015 +1000
Committer: Cameron McKenzie <ca...@unico.com.au>
Committed: Wed Apr 22 09:06:29 2015 +1000

----------------------------------------------------------------------
 curator-client/pom.xml                          |   4 +-
 .../org/apache/curator/utils/ThreadUtils.java   |   5 +
 .../java/org/apache/curator/utils/ZKPaths.java  | 103 ++++--
 .../org/apache/curator/utils/TestZKPaths.java   |  11 +
 curator-examples/pom.xml                        |   2 +-
 .../main/java/discovery/InstanceDetails.java    |   2 +-
 curator-framework/pom.xml                       |   4 +-
 .../org/apache/curator/framework/AuthInfo.java  |  51 +++
 .../framework/CuratorFrameworkFactory.java      | 127 +++++--
 .../framework/imps/CreateBuilderImpl.java       |  16 +-
 .../framework/imps/CuratorFrameworkImpl.java    | 116 +++---
 .../imps/CuratorTempFrameworkImpl.java          |  10 +-
 .../framework/imps/DeleteBuilderImpl.java       | 103 +++---
 .../curator/framework/imps/NamespaceFacade.java |   8 +-
 .../curator/framework/imps/NamespaceImpl.java   |   6 +-
 .../curator/framework/imps/TestFramework.java   | 349 ++++++++++++-------
 .../framework/imps/TestFrameworkEdges.java      |  81 ++++-
 curator-recipes/pom.xml                         |   4 +-
 .../recipes/cache/PathChildrenCache.java        |  16 +-
 .../framework/recipes/cache/TreeCache.java      |   2 +-
 .../framework/recipes/locks/ChildReaper.java    | 157 ++++++++-
 .../locks/InterProcessReadWriteLock.java        |  34 +-
 .../recipes/locks/InterProcessSemaphoreV2.java  |   7 +
 .../curator/framework/recipes/locks/Reaper.java |  65 +++-
 .../recipes/nodes/PersistentEphemeralNode.java  |   2 +-
 .../src/site/confluence/Tree-cache.confluence   |  39 ---
 .../src/site/confluence/tree-cache.confluence   |  39 +++
 .../framework/recipes/cache/TestTreeCache.java  |  43 +++
 .../recipes/leader/TestLeaderSelector.java      |  67 ++++
 .../recipes/locks/TestChildReaper.java          | 248 ++++++++++++-
 .../locks/TestInterProcessReadWriteLock.java    |  33 ++
 .../locks/TestInterProcessSemaphore.java        |  40 +++
 .../framework/recipes/locks/TestReaper.java     |  90 ++++-
 .../nodes/TestPersistentEphemeralNode.java      |  37 ++
 curator-test/pom.xml                            |   4 +-
 curator-x-discovery-server/pom.xml              |   4 +-
 .../contexts/GenericDiscoveryContext.java       |   8 +-
 .../contexts/IntegerDiscoveryContext.java       |   4 +-
 .../server/contexts/StringDiscoveryContext.java |   4 +-
 .../entity/JsonServiceInstanceMarshaller.java   |   6 +-
 .../entity/JsonServiceInstancesMarshaller.java  |   8 +-
 .../entity/JsonServiceNamesMarshaller.java      |   8 +-
 .../discovery/server/rest/DiscoveryContext.java |   4 +-
 .../server/jetty_jersey/ServiceDetails.java     |   4 +-
 curator-x-discovery/pom.xml                     |  18 +-
 .../x/discovery/ServiceDiscoveryBuilder.java    |  45 ++-
 .../curator/x/discovery/ServiceInstance.java    |   6 +-
 .../details/JsonInstanceSerializer.java         |   4 +-
 .../discovery/details/ServiceDiscoveryImpl.java |  81 ++++-
 .../x/discovery/TestServiceDiscovery.java       | 106 ++++--
 .../discovery/details/TestWatchedInstances.java |  94 +++++
 curator-x-rpc/pom.xml                           |  23 +-
 .../java/org/apache/curator/x/rpc/RpcTests.java |   6 +-
 pom.xml                                         |  84 +----
 54 files changed, 1854 insertions(+), 588 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/6e16d0d5/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentEphemeralNode.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/curator/blob/6e16d0d5/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
----------------------------------------------------------------------
diff --cc curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
index 31e7ef2,8bc8d3d..1c66271
--- 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
@@@ -465,76 -464,40 +466,112 @@@ public class TestPersistentEphemeralNod
      }
      
      /**
 +     * Test that if a persistent ephemeral node is created and the node already exists
 +     * that if data is present in the PersistentEphermalNode that it is still set. 
 +     * @throws Exception
 +     */
 +    @Test
 +    public void testSetDataWhenNodeExists() throws Exception
 +    {
 +        CuratorFramework curator = newCurator();
 +        curator.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(PATH, "InitialData".getBytes());
 +        
 +        byte[] data = "Hello World".getBytes();
 +             
 +        PersistentEphemeralNode node = new PersistentEphemeralNode(curator, PersistentEphemeralNode.Mode.EPHEMERAL, PATH, data);
 +        node.start();
 +        try
 +        {
 +            node.waitForInitialCreate(timing.forWaiting().seconds(), TimeUnit.SECONDS);
 +            assertTrue(Arrays.equals(curator.getData().forPath(node.getActualPath()), data));
 +        }
 +        finally
 +        {
 +            node.close();
 +        }
 +    }
 +    
 +    @Test
 +    public void testSetDataWhenDisconnected() throws Exception
 +    {
 +        CuratorFramework curator = newCurator();
 +        
 +        byte[] initialData = "Hello World".getBytes();
 +        byte[] updatedData = "Updated".getBytes();
 +             
 +        PersistentEphemeralNode node = new PersistentEphemeralNode(curator, PersistentEphemeralNode.Mode.EPHEMERAL, PATH, initialData);
 +        node.start();
 +        try
 +        {
 +            node.waitForInitialCreate(timing.forWaiting().seconds(), TimeUnit.SECONDS);
 +            assertTrue(Arrays.equals(curator.getData().forPath(node.getActualPath()), initialData));
 +            
 +            server.stop();
 +            
 +            final CountDownLatch dataUpdateLatch = new CountDownLatch(1);
 +            
 +            Watcher watcher = new Watcher()
 +            {
 +				@Override
 +				public void process(WatchedEvent event)
 +				{
 +					if ( event.getType() == EventType.NodeDataChanged )
 +					{
 +						dataUpdateLatch.countDown();
 +					}
 +				}            	
 +            };
 +            
 +            curator.getData().usingWatcher(watcher).inBackground().forPath(node.getActualPath());
 +            
 +            node.setData(updatedData);
 +            server.restart();
 +
 +            assertTrue(timing.awaitLatch(dataUpdateLatch));
 +                       
 +            assertTrue(Arrays.equals(curator.getData().forPath(node.getActualPath()), updatedData));
 +        }
 +        finally
 +        {
 +            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
      {