You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by dr...@apache.org on 2015/08/19 01:18:24 UTC

[08/31] curator git commit: CURATOR-161 - Modified to make the watcher type optional, defaulting to 'All'.

CURATOR-161 - Modified to make the watcher type optional, defaulting to
'All'.


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

Branch: refs/heads/CURATOR-3.0
Commit: 389e0b0d29899bd35ebd4d7c81302d3d8ee53889
Parents: 198ba68
Author: Cameron McKenzie <ca...@unico.com.au>
Authored: Mon May 11 13:14:40 2015 +1000
Committer: Cameron McKenzie <ca...@unico.com.au>
Committed: Mon May 11 13:14:40 2015 +1000

----------------------------------------------------------------------
 .../framework/api/RemoveWatchesType.java        |   2 +-
 .../imps/RemoveWatchesBuilderImpl.java          |   2 +-
 .../framework/imps/TestRemoveWatches.java       | 218 ++++++++++++-------
 3 files changed, 140 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/389e0b0d/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesType.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesType.java b/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesType.java
index 3c58b7b..1123afd 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesType.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesType.java
@@ -6,7 +6,7 @@ import org.apache.zookeeper.Watcher.WatcherType;
  * Builder to allow the specification of whether it is acceptable to remove client side watch information
  * in the case where ZK cannot be contacted. 
  */
-public interface RemoveWatchesType
+public interface RemoveWatchesType extends RemoveWatchesLocal
 {
    
     /**

http://git-wip-us.apache.org/repos/asf/curator/blob/389e0b0d/curator-framework/src/main/java/org/apache/curator/framework/imps/RemoveWatchesBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/RemoveWatchesBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/RemoveWatchesBuilderImpl.java
index 4354653..5a34f7d 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/RemoveWatchesBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/RemoveWatchesBuilderImpl.java
@@ -35,7 +35,7 @@ public class RemoveWatchesBuilderImpl implements RemoveWatchesBuilder, RemoveWat
     {
         this.client = client;
         this.watcher = null;
-        this.watcherType = null;
+        this.watcherType = WatcherType.Any;
         this.local = false;
         this.quietly = false;
         this.backgrounding = new Backgrounding();

http://git-wip-us.apache.org/repos/asf/curator/blob/389e0b0d/curator-framework/src/test/java/org/apache/curator/framework/imps/TestRemoveWatches.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestRemoveWatches.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestRemoveWatches.java
index 39967c9..414c819 100644
--- a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestRemoveWatches.java
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestRemoveWatches.java
@@ -1,6 +1,7 @@
 package org.apache.curator.framework.imps;
 
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.curator.framework.CuratorFramework;
@@ -53,7 +54,7 @@ public class TestRemoveWatches extends BaseClassForTests
                         
             client.checkExists().watched().forPath(path);
             
-            client.watches().removeAll().ofType(WatcherType.Data).forPath(path);
+            client.watches().removeAll().forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
         }
@@ -92,7 +93,7 @@ public class TestRemoveWatches extends BaseClassForTests
                         
             client.checkExists().usingWatcher(watcher).forPath(path);
             
-            client.watches().remove(watcher).ofType(WatcherType.Data).forPath(path);
+            client.watches().remove(watcher).forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
         }
@@ -117,20 +118,11 @@ public class TestRemoveWatches extends BaseClassForTests
             final CountDownLatch removedLatch = new CountDownLatch(1);
             
             final String path = "/";    
-            Watcher watcher = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }                    
-                }
-            };
+            Watcher watcher = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);
             
             client.checkExists().usingWatcher(watcher).forPath(path);
             
-            client.watches().remove(watcher).ofType(WatcherType.Data).forPath(path);
+            client.watches().remove(watcher).forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
         }
@@ -155,16 +147,7 @@ public class TestRemoveWatches extends BaseClassForTests
             //Make sure that the event fires on both the watcher and the callback.
             final CountDownLatch removedLatch = new CountDownLatch(2);
             final String path = "/";
-            Watcher watcher = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }                        
-                }
-            };
+            Watcher watcher = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);
             
             BackgroundCallback callback = new BackgroundCallback()
             {
@@ -207,20 +190,11 @@ public class TestRemoveWatches extends BaseClassForTests
             
             final String path = "/";
             final CountDownLatch removedLatch = new CountDownLatch(1);
-            Watcher watcher = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }                    
-                }
-            };
+            Watcher watcher = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);
             
             client.checkExists().usingWatcher(watcher).forPath(path);
             
-            client.watches().remove(watcher).ofType(WatcherType.Any).inBackground().forPath(path);
+            client.watches().remove(watcher).inBackground().forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
             
@@ -246,41 +220,87 @@ public class TestRemoveWatches extends BaseClassForTests
             final String path = "/";
             final CountDownLatch removedLatch = new CountDownLatch(2);
             
-            Watcher watcher1 = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }
-                }
-            };
+            Watcher watcher1 = new CountDownWatcher(path, removedLatch, EventType.ChildWatchRemoved);            
+            Watcher watcher2 = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);                        
             
-            Watcher watcher2 = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }                    
-                }
-            };            
+            client.getChildren().usingWatcher(watcher1).forPath(path);
+            client.checkExists().usingWatcher(watcher2).forPath(path);
             
+            client.watches().removeAll().forPath(path);
             
-            client.checkExists().usingWatcher(watcher1).forPath(path);
+            Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
+        }
+        finally
+        {
+            CloseableUtils.closeQuietly(client);
+        }
+    }  
+    
+    @Test
+    public void testRemoveAllDataWatches() throws Exception
+    {       
+        Timing timing = new Timing();
+        CuratorFramework client = CuratorFrameworkFactory.builder().
+                connectString(server.getConnectString()).
+                retryPolicy(new RetryOneTime(1)).
+                build();
+        try
+        {
+            client.start();
+            
+            final String path = "/";
+            final AtomicBoolean removedFlag = new AtomicBoolean(false);
+            final CountDownLatch removedLatch = new CountDownLatch(1);
+            
+            Watcher watcher1 = new BooleanWatcher(path, removedFlag, EventType.ChildWatchRemoved);            
+            Watcher watcher2 = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);                        
+            
+            client.getChildren().usingWatcher(watcher1).forPath(path);
             client.checkExists().usingWatcher(watcher2).forPath(path);
             
-            client.watches().removeAll().ofType(WatcherType.Any).forPath(path);
+            client.watches().removeAll().ofType(WatcherType.Data).forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
+            Assert.assertEquals(removedFlag.get(), false);
         }
         finally
         {
             CloseableUtils.closeQuietly(client);
         }
-    }  
+    }
+    
+    @Test
+    public void testRemoveAllChildWatches() throws Exception
+    {       
+        Timing timing = new Timing();
+        CuratorFramework client = CuratorFrameworkFactory.builder().
+                connectString(server.getConnectString()).
+                retryPolicy(new RetryOneTime(1)).
+                build();
+        try
+        {
+            client.start();
+            
+            final String path = "/";
+            final AtomicBoolean removedFlag = new AtomicBoolean(false);
+            final CountDownLatch removedLatch = new CountDownLatch(1);
+            
+            Watcher watcher1 = new BooleanWatcher(path, removedFlag, EventType.DataWatchRemoved);            
+            Watcher watcher2 = new CountDownWatcher(path, removedLatch, EventType.ChildWatchRemoved);                        
+                        
+            client.checkExists().usingWatcher(watcher1).forPath(path);
+            client.getChildren().usingWatcher(watcher2).forPath(path);
+            
+            client.watches().removeAll().ofType(WatcherType.Children).forPath(path);
+            
+            Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
+            Assert.assertEquals(removedFlag.get(), false);
+        }
+        finally
+        {
+            CloseableUtils.closeQuietly(client);
+        }
+    }     
     
     /**
      * TODO: THIS IS STILL A WORK IN PROGRESS. local() is currently broken if no connection to ZK is available.
@@ -301,20 +321,7 @@ public class TestRemoveWatches extends BaseClassForTests
             
             final CountDownLatch removedLatch = new CountDownLatch(1);
             
-            Watcher watcher = new Watcher()
-            {                
-                @Override
-                public void process(WatchedEvent event)
-                {
-                    if(event.getPath() == null || event.getType() == null) {
-                        return;
-                    }
-                    
-                    if(event.getPath().equals(path) && event.getType() == EventType.DataWatchRemoved) {
-                        removedLatch.countDown();
-                    }
-                }
-            };            
+            Watcher watcher = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);        
             
             client.checkExists().usingWatcher(watcher).forPath(path);
             
@@ -323,7 +330,7 @@ public class TestRemoveWatches extends BaseClassForTests
             
             timing.sleepABit();
             
-            client.watches().removeAll().ofType(WatcherType.Any).locally().forPath(path);
+            client.watches().removeAll().locally().forPath(path);
             
             Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
         }
@@ -357,7 +364,7 @@ public class TestRemoveWatches extends BaseClassForTests
                 }                
             };
             
-            client.watches().remove(watcher).ofType(WatcherType.Data).forPath(path);
+            client.watches().remove(watcher).forPath(path);
         }
         finally
         {
@@ -372,6 +379,7 @@ public class TestRemoveWatches extends BaseClassForTests
     @Test
     public void testRemoveUnregisteredWatcherQuietly() throws Exception
     {
+        Timing timing = new Timing();
         CuratorFramework client = CuratorFrameworkFactory.builder().
                 connectString(server.getConnectString()).
                 retryPolicy(new RetryOneTime(1)).
@@ -380,19 +388,69 @@ public class TestRemoveWatches extends BaseClassForTests
         {
             client.start();
             
+            final AtomicBoolean watcherRemoved = new AtomicBoolean(false);
+            
             final String path = "/";            
-            Watcher watcher = new Watcher() {
-                @Override
-                public void process(WatchedEvent event)
-                {
-                }                
-            };
+            Watcher watcher = new BooleanWatcher(path, watcherRemoved, EventType.DataWatchRemoved);
             
-            client.watches().remove(watcher).ofType(WatcherType.Data).quietly().forPath(path);
+            client.watches().remove(watcher).quietly().forPath(path);
+            
+            timing.sleepABit();
+            
+            //There should be no watcher removed as none were registered.
+            Assert.assertEquals(watcherRemoved.get(), false);
         }
         finally
         {
             CloseableUtils.closeQuietly(client);
         }
+    }
+    
+    private static class CountDownWatcher implements Watcher {
+        private String path;
+        private EventType eventType;
+        private CountDownLatch removeLatch;
+        
+        public CountDownWatcher(String path, CountDownLatch removeLatch, EventType eventType) {
+            this.path = path;
+            this.eventType = eventType;
+            this.removeLatch = removeLatch;            
+        }
+        
+        @Override
+        public void process(WatchedEvent event)
+        {
+            if(event.getPath() == null || event.getType() == null) {
+                return;
+            }
+            
+            if(event.getPath().equals(path) && event.getType() == eventType) {
+                removeLatch.countDown();
+            }
+        }  
+    }
+    
+    private static class BooleanWatcher implements Watcher {
+        private String path;
+        private EventType eventType;
+        private AtomicBoolean removedFlag;
+        
+        public BooleanWatcher(String path, AtomicBoolean removedFlag, EventType eventType) {
+            this.path = path;
+            this.eventType = eventType;
+            this.removedFlag = removedFlag;            
+        }
+        
+        @Override
+        public void process(WatchedEvent event)
+        {
+            if(event.getPath() == null || event.getType() == null) {
+                return;
+            }
+            
+            if(event.getPath().equals(path) && event.getType() == eventType) {
+                removedFlag.set(true);
+            }
+        }  
     }    
 }