curator git commit: CURATOR-476 PathChildrenCache should check resultCode=-101 for getData(...) done on non-existent child and remove it from it's initialSet

2018-08-13 Thread cammckenzie
Repository: curator
Updated Branches:
  refs/heads/master 8a75db877 -> 895015165


CURATOR-476 PathChildrenCache should check resultCode=-101 for getData(...) 
done on non-existent child and remove it from it's initialSet


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

Branch: refs/heads/master
Commit: 895015165dca24fb58aa23a1949bed0476761910
Parents: 8a75db8
Author: rsouhrain 
Authored: Fri Aug 10 14:10:18 2018 +0100
Committer: rsouhrain 
Committed: Fri Aug 10 14:10:18 2018 +0100

--
 .../recipes/cache/PathChildrenCache.java|  7 ++-
 .../recipes/cache/TestPathChildrenCache.java| 51 
 2 files changed, 57 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/curator/blob/89501516/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
--
diff --git 
a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
 
b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
index 5d418c6..f8c4e93 100644
--- 
a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
+++ 
b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
@@ -601,7 +601,7 @@ public class PathChildrenCache implements Closeable
 Map localInitialSet = initialSet.get();
 if ( localInitialSet != null )
 {
-localInitialSet.remove(fullPath);
+localInitialSet.remove(ZKPaths.getNodeFromPath(fullPath));
 maybeOfferInitializedEvent(localInitialSet);
 }
 }
@@ -713,6 +713,11 @@ public class PathChildrenCache implements Closeable
 }
 updateInitialSet(ZKPaths.getNodeFromPath(fullPath), data);
 }
+else if ( resultCode == KeeperException.Code.NONODE.intValue() )
+{
+log.debug("NoNode at path {}, removing child from initialSet", 
fullPath);
+remove(fullPath);
+}
 }
 
 private void updateInitialSet(String name, ChildData data)

http://git-wip-us.apache.org/repos/asf/curator/blob/89501516/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
--
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
index da294c8..d2f8cc0 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
@@ -95,6 +95,57 @@ public class TestPathChildrenCache extends BaseClassForTests
 }
 
 @Test
+public void testInitializedEvenIfChildDeleted() throws Exception
+{
+final CuratorFramework client = 
CuratorFrameworkFactory.newClient(server.getConnectString(), new 
RetryOneTime(1));
+
+PathChildrenCache cache = new PathChildrenCache(client, "/a/b/test", 
true)
+{
+@Override
+void getDataAndStat(final String fullPath) throws Exception
+{
+// before installing a data watcher on the child, let's delete 
this child
+client.delete().forPath("/a/b/test/one");
+super.getDataAndStat(fullPath);
+}
+};
+
+Timing timing = new Timing();
+
+try
+{
+client.start();
+
+final CountDownLatch cacheInitialized = new CountDownLatch(1);
+
+PathChildrenCacheListener listener = new 
PathChildrenCacheListener()
+{
+@Override
+public void childEvent(CuratorFramework client, 
PathChildrenCacheEvent event) throws Exception
+{
+if ( event.getType() == 
PathChildrenCacheEvent.Type.INITIALIZED )
+{
+cacheInitialized.countDown();
+}
+}
+};
+cache.getListenable().addListener(listener);
+
+client.create().creatingParentsIfNeeded().forPath("/a/b/test/one");
+
+cache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
+
+Assert.assertTrue(timing.awaitLatch(cacheInitialized));
+Assert.assertEquals(cache.getCurrentData().size(), 0);
+}
+ 

curator git commit: CURATOR-476 PathChildrenCache should check resultCode=-101 for getData(...) done on non-existent child and remove it from it's initialSet

2018-08-13 Thread cammckenzie
Repository: curator
Updated Branches:
  refs/heads/CURATOR-476 [created] 895015165


CURATOR-476 PathChildrenCache should check resultCode=-101 for getData(...) 
done on non-existent child and remove it from it's initialSet


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

Branch: refs/heads/CURATOR-476
Commit: 895015165dca24fb58aa23a1949bed0476761910
Parents: 8a75db8
Author: rsouhrain 
Authored: Fri Aug 10 14:10:18 2018 +0100
Committer: rsouhrain 
Committed: Fri Aug 10 14:10:18 2018 +0100

--
 .../recipes/cache/PathChildrenCache.java|  7 ++-
 .../recipes/cache/TestPathChildrenCache.java| 51 
 2 files changed, 57 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/curator/blob/89501516/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
--
diff --git 
a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
 
b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
index 5d418c6..f8c4e93 100644
--- 
a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
+++ 
b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
@@ -601,7 +601,7 @@ public class PathChildrenCache implements Closeable
 Map localInitialSet = initialSet.get();
 if ( localInitialSet != null )
 {
-localInitialSet.remove(fullPath);
+localInitialSet.remove(ZKPaths.getNodeFromPath(fullPath));
 maybeOfferInitializedEvent(localInitialSet);
 }
 }
@@ -713,6 +713,11 @@ public class PathChildrenCache implements Closeable
 }
 updateInitialSet(ZKPaths.getNodeFromPath(fullPath), data);
 }
+else if ( resultCode == KeeperException.Code.NONODE.intValue() )
+{
+log.debug("NoNode at path {}, removing child from initialSet", 
fullPath);
+remove(fullPath);
+}
 }
 
 private void updateInitialSet(String name, ChildData data)

http://git-wip-us.apache.org/repos/asf/curator/blob/89501516/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
--
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
index da294c8..d2f8cc0 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/cache/TestPathChildrenCache.java
@@ -95,6 +95,57 @@ public class TestPathChildrenCache extends BaseClassForTests
 }
 
 @Test
+public void testInitializedEvenIfChildDeleted() throws Exception
+{
+final CuratorFramework client = 
CuratorFrameworkFactory.newClient(server.getConnectString(), new 
RetryOneTime(1));
+
+PathChildrenCache cache = new PathChildrenCache(client, "/a/b/test", 
true)
+{
+@Override
+void getDataAndStat(final String fullPath) throws Exception
+{
+// before installing a data watcher on the child, let's delete 
this child
+client.delete().forPath("/a/b/test/one");
+super.getDataAndStat(fullPath);
+}
+};
+
+Timing timing = new Timing();
+
+try
+{
+client.start();
+
+final CountDownLatch cacheInitialized = new CountDownLatch(1);
+
+PathChildrenCacheListener listener = new 
PathChildrenCacheListener()
+{
+@Override
+public void childEvent(CuratorFramework client, 
PathChildrenCacheEvent event) throws Exception
+{
+if ( event.getType() == 
PathChildrenCacheEvent.Type.INITIALIZED )
+{
+cacheInitialized.countDown();
+}
+}
+};
+cache.getListenable().addListener(listener);
+
+client.create().creatingParentsIfNeeded().forPath("/a/b/test/one");
+
+cache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
+
+Assert.assertTrue(timing.awaitLatch(cacheInitialized));
+Assert.assertEquals(cache.getCurrentData().size(), 0);
+