Repository: curator
Updated Branches:
  refs/heads/master 5b15f5fab -> 2d4aa5778


added support for zkwatches


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

Branch: refs/heads/master
Commit: d4a0d95488345bfb0983553bfbfbc40643ac031b
Parents: 8950151
Author: Rama <[email protected]>
Authored: Mon Aug 20 12:16:12 2018 +0530
Committer: Rama <[email protected]>
Committed: Mon Aug 20 12:16:12 2018 +0530

----------------------------------------------------------------------
 .../framework/recipes/cache/TreeCache.java      | 41 +++++++++++++++++---
 .../framework/recipes/cache/TestTreeCache.java  | 25 ++++++++++++
 2 files changed, 60 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/d4a0d954/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 7f8aad7..7bcc8d1 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
@@ -73,6 +73,7 @@ public class TreeCache implements Closeable
 {
     private static final Logger LOG = LoggerFactory.getLogger(TreeCache.class);
     private final boolean createParentNodes;
+    private final boolean createZkWatches;
     private final TreeCacheSelector selector;
 
     public static final class Builder
@@ -84,6 +85,7 @@ public class TreeCache implements Closeable
         private ExecutorService executorService = null;
         private int maxDepth = Integer.MAX_VALUE;
         private boolean createParentNodes = false;
+        private boolean createZkWatches = true;
         private TreeCacheSelector selector = new DefaultTreeCacheSelector();
 
         private Builder(CuratorFramework client, String path)
@@ -102,7 +104,7 @@ public class TreeCache implements Closeable
             {
                 executor = 
Executors.newSingleThreadExecutor(defaultThreadFactory);
             }
-            return new TreeCache(client, path, cacheData, dataIsCompressed, 
maxDepth, executor, createParentNodes, selector);
+            return new TreeCache(client, path, cacheData, dataIsCompressed, 
maxDepth, executor, createParentNodes, createZkWatches, selector);
         }
 
         /**
@@ -166,6 +168,18 @@ public class TreeCache implements Closeable
         }
 
         /**
+         * By default, TreeCache creates {@link 
org.apache.zookeeper.ZooKeeper} watches for every created path.
+         * Change this behavior with this method.
+         * @param createZkWatches true to create watches
+         * @return this for chaining
+         */
+        public Builder setCreateZkWatches(boolean createZkWatches)
+        {
+            this.createZkWatches = createZkWatches;
+            return this;
+        }
+
+        /**
          * By default, {@link DefaultTreeCacheSelector} is used. Change the 
selector here.
          *
          * @param selector new selector
@@ -253,7 +267,11 @@ public class TreeCache implements Closeable
         {
             if ( treeState.get() == TreeState.STARTED )
             {
-                
client.getChildren().usingWatcher(this).inBackground(this).forPath(path);
+                if (createZkWatches) {
+                    
client.getChildren().usingWatcher(this).inBackground(this).forPath(path);
+                } else {
+                    client.getChildren().inBackground(this).forPath(path);
+                }
             }
         }
 
@@ -263,11 +281,20 @@ public class TreeCache implements Closeable
             {
                 if ( dataIsCompressed )
                 {
-                    
client.getData().decompressed().usingWatcher(this).inBackground(this).forPath(path);
+                    if (createZkWatches) {
+                        
client.getData().decompressed().usingWatcher(this).inBackground(this).forPath(path);
+                    } else {
+                        
client.getData().decompressed().inBackground(this).forPath(path);
+                    }
                 }
                 else
                 {
-                    
client.getData().usingWatcher(this).inBackground(this).forPath(path);
+                   if (createZkWatches) {
+                       
client.getData().usingWatcher(this).inBackground(this).forPath(path);
+                   } else {
+                       client.getData().inBackground(this).forPath(path);
+
+                   }
                 }
             }
         }
@@ -535,7 +562,7 @@ public class TreeCache implements Closeable
      */
     public TreeCache(CuratorFramework client, String path)
     {
-        this(client, path, true, false, Integer.MAX_VALUE, 
Executors.newSingleThreadExecutor(defaultThreadFactory), false, new 
DefaultTreeCacheSelector());
+        this(client, path, true, false, Integer.MAX_VALUE, 
Executors.newSingleThreadExecutor(defaultThreadFactory), false, true, new 
DefaultTreeCacheSelector());
     }
 
     /**
@@ -545,9 +572,10 @@ public class TreeCache implements Closeable
      * @param dataIsCompressed if true, data in the path is compressed
      * @param executorService  Closeable ExecutorService to use for the 
TreeCache's background thread
      * @param createParentNodes true to create parent nodes as containers
+     * @param createZkWatches true to create Zookeeper watches
      * @param selector         the selector to use
      */
-    TreeCache(CuratorFramework client, String path, boolean cacheData, boolean 
dataIsCompressed, int maxDepth, final ExecutorService executorService, boolean 
createParentNodes, TreeCacheSelector selector)
+    TreeCache(CuratorFramework client, String path, boolean cacheData, boolean 
dataIsCompressed, int maxDepth, final ExecutorService executorService, boolean 
createParentNodes, boolean createZkWatches, TreeCacheSelector selector)
     {
         this.createParentNodes = createParentNodes;
         this.selector = Preconditions.checkNotNull(selector, "selector cannot 
be null");
@@ -557,6 +585,7 @@ public class TreeCache implements Closeable
         this.cacheData = cacheData;
         this.dataIsCompressed = dataIsCompressed;
         this.maxDepth = maxDepth;
+        this.createZkWatches = createZkWatches;
         this.executorService = Preconditions.checkNotNull(executorService, 
"executorService cannot be null");
     }
 

http://git-wip-us.apache.org/repos/asf/curator/blob/d4a0d954/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 ebaf43e..ae15314 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
@@ -468,6 +468,31 @@ public class TestTreeCache extends BaseTestTreeCache
     }
 
     @Test
+    public void testBasicsWithNoZkWatches() throws Exception
+    {
+        client.create().forPath("/test");
+        client.create().forPath("/test/one", "hey there".getBytes());
+
+
+        cache = buildWithListeners(TreeCache.newBuilder(client, 
"/test").setCreateZkWatches(false));
+
+        cache.start();
+        assertEvent(TreeCacheEvent.Type.NODE_ADDED, "/test");
+        assertEvent(TreeCacheEvent.Type.NODE_ADDED, "/test/one");
+
+        assertEvent(TreeCacheEvent.Type.INITIALIZED);
+        Assert.assertEquals(cache.getCurrentChildren("/test").keySet(), 
ImmutableSet.of("one"));
+        Assert.assertEquals(new 
String(cache.getCurrentData("/test/one").getData()), "hey there");
+        Assert.assertEquals(cache.getCurrentChildren("/test/one").keySet(), 
ImmutableSet.of());
+        Assert.assertNull(cache.getCurrentChildren("/test/o"));
+        Assert.assertNull(cache.getCurrentChildren("/test/onely"));
+        Assert.assertNull(cache.getCurrentChildren("/t"));
+        Assert.assertNull(cache.getCurrentChildren("/testing"));
+
+        assertNoMoreEvents();
+    }
+
+    @Test
     public void testBasicsOnTwoCaches() throws Exception
     {
         TreeCache cache2 = newTreeCacheWithListeners(client, "/test");

Reply via email to