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:27 UTC
[11/31] curator git commit: CURATOR-161 - Some progress in getting
locally() to work. Working now for the foreground case,
but still not working for the background case because it tries to guarantee a
connection before the command is executed.
CURATOR-161 - Some progress in getting locally() to work. Working now for
the foreground case, but still not working for the background case because
it tries to guarantee a connection before the command is executed.
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/04caf36c
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/04caf36c
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/04caf36c
Branch: refs/heads/CURATOR-3.0
Commit: 04caf36cd4ee76b358c7866da18c858b5608ebca
Parents: 389e0b0
Author: Cameron McKenzie <ca...@unico.com.au>
Authored: Tue May 12 07:46:43 2015 +1000
Committer: Cameron McKenzie <ca...@unico.com.au>
Committed: Tue May 12 07:46:43 2015 +1000
----------------------------------------------------------------------
.../framework/api/RemoveWatchesLocal.java | 2 +-
.../imps/RemoveWatchesBuilderImpl.java | 62 ++++++++++++--------
.../framework/imps/TestRemoveWatches.java | 42 +++++++++++--
3 files changed, 77 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/04caf36c/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesLocal.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesLocal.java b/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesLocal.java
index 3769d1f..e002857 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesLocal.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/api/RemoveWatchesLocal.java
@@ -9,7 +9,7 @@ public interface RemoveWatchesLocal extends BackgroundPathableQuietly<Void>
/**
* Specify if the client should just remove client side watches if a connection to ZK
- * is not available.
+ * is not available. Note that the standard Curator retry loop will not be used in t
* @return
*/
public BackgroundPathableQuietly<Void> locally();
http://git-wip-us.apache.org/repos/asf/curator/blob/04caf36c/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 5a34f7d..c9868f4 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
@@ -151,36 +151,52 @@ public class RemoveWatchesBuilderImpl implements RemoveWatchesBuilder, RemoveWat
private void pathInForeground(final String path) throws Exception
{
- RetryLoop.callWithRetry(client.getZookeeperClient(),
- new Callable<Void>()
- {
- @Override
- public Void call() throws Exception
+ if(local)
+ {
+ ZooKeeper zkClient = client.getZooKeeper();
+ if(watcher == null)
+ {
+ zkClient.removeAllWatches(path, watcherType, local);
+ }
+ else
+ {
+ zkClient.removeWatches(path, watcher, watcherType, local);
+ }
+ }
+ else
+ {
+ RetryLoop.callWithRetry(client.getZookeeperClient(),
+ new Callable<Void>()
{
- try
+ @Override
+ public Void call() throws Exception
{
- ZooKeeper zkClient = client.getZooKeeper();
- if(watcher == null)
+ try
{
- zkClient.removeAllWatches(path, watcherType, local);
+ ZooKeeper zkClient = client.getZookeeperClient().getZooKeeper();
+
+ if(watcher == null)
+ {
+ zkClient.removeAllWatches(path, watcherType, local);
+ }
+ else
+ {
+ zkClient.removeWatches(path, watcher, watcherType, local);
+ }
}
- else
+ catch(KeeperException.NoWatcherException e)
{
- zkClient.removeWatches(path, watcher, watcherType, local);
+ //Swallow this exception if the quietly flag is set, otherwise rethrow.
+ if(!quietly)
+ {
+ throw e;
+ }
}
- }
- catch(KeeperException.NoWatcherException e)
- {
- //Swallow this exception if the quietly flag is set, otherwise rethrow.
- if(!quietly)
- {
- throw e;
- }
- }
- return null;
- }
- });
+ return null;
+ }
+ });
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/curator/blob/04caf36c/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 414c819..0912c70 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
@@ -20,6 +20,8 @@ import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.WatcherType;
+import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.Stat;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -302,10 +304,6 @@ public class TestRemoveWatches extends BaseClassForTests
}
}
- /**
- * TODO: THIS IS STILL A WORK IN PROGRESS. local() is currently broken if no connection to ZK is available.
- * @throws Exception
- */
@Test
public void testRemoveLocalWatch() throws Exception {
Timing timing = new Timing();
@@ -329,7 +327,7 @@ public class TestRemoveWatches extends BaseClassForTests
server.stop();
timing.sleepABit();
-
+
client.watches().removeAll().locally().forPath(path);
Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
@@ -340,6 +338,40 @@ public class TestRemoveWatches extends BaseClassForTests
}
}
+ @Test
+ public void testRemoveLocalWatchInBackground() 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 CountDownLatch removedLatch = new CountDownLatch(1);
+
+ Watcher watcher = new CountDownWatcher(path, removedLatch, EventType.DataWatchRemoved);
+
+ client.checkExists().usingWatcher(watcher).forPath(path);
+
+ //Stop the server so we can check if we can remove watches locally when offline
+ server.stop();
+
+ timing.sleepABit();
+
+ client.watches().removeAll().locally().inBackground().forPath(path);
+
+ Assert.assertTrue(timing.awaitLatch(removedLatch), "Timed out waiting for watch removal");
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
/**
* Test the case where we try and remove an unregistered watcher. In this case we expect a NoWatcherException to
* be thrown.