[
https://issues.apache.org/jira/browse/CURATOR-217?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14551696#comment-14551696
]
ASF GitHub Bot commented on CURATOR-217:
----------------------------------------
Github user Randgalt commented on a diff in the pull request:
https://github.com/apache/curator/pull/82#discussion_r30667688
--- Diff:
curator-framework/src/test/java/org/apache/curator/framework/imps/TestWatcherRemovalManager.java
---
@@ -0,0 +1,251 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.curator.framework.imps;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.WatcherRemoveCuratorFramework;
+import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.test.BaseClassForTests;
+import org.apache.curator.test.Timing;
+import org.apache.curator.test.WatchersDebug;
+import org.apache.curator.utils.CloseableUtils;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+public class TestWatcherRemovalManager extends BaseClassForTests
+{
+ @Test
+ public void testBasic() throws Exception
+ {
+ CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new
RetryOneTime(1));
+ try
+ {
+ client.start();
+ internalTryBasic(client);
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testBasicNamespace1() throws Exception
+ {
+ CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new
RetryOneTime(1));
+ try
+ {
+ client.start();
+ internalTryBasic(client.usingNamespace("foo"));
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testBasicNamespace2() throws Exception
+ {
+ CuratorFramework client = CuratorFrameworkFactory.builder()
+ .connectString(server.getConnectString())
+ .retryPolicy(new RetryOneTime(1))
+ .namespace("hey")
+ .build();
+ try
+ {
+ client.start();
+ internalTryBasic(client);
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testBasicNamespace3() throws Exception
+ {
+ CuratorFramework client = CuratorFrameworkFactory.builder()
+ .connectString(server.getConnectString())
+ .retryPolicy(new RetryOneTime(1))
+ .namespace("hey")
+ .build();
+ try
+ {
+ client.start();
+ internalTryBasic(client.usingNamespace("lakjsf"));
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testSameWatcher() throws Exception
+ {
+ CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new
RetryOneTime(1));
+ try
+ {
+ client.start();
+
+ WatcherRemovalFacade removerClient =
(WatcherRemovalFacade)client.newWatcherRemoveCuratorFramework();
+
+ Watcher watcher = new Watcher()
+ {
+ @Override
+ public void process(WatchedEvent event)
+ {
+ // NOP
+ }
+ };
+
+ removerClient.getData().usingWatcher(watcher).forPath("/");
+
Assert.assertEquals(removerClient.getRemovalManager().getEntries().size(), 1);
+ removerClient.getData().usingWatcher(watcher).forPath("/");
+
Assert.assertEquals(removerClient.getRemovalManager().getEntries().size(), 1);
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testTriggered() throws Exception
+ {
+ CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new
RetryOneTime(1));
+ try
+ {
+ client.start();
+
+ WatcherRemovalFacade removerClient =
(WatcherRemovalFacade)client.newWatcherRemoveCuratorFramework();
+
+ final CountDownLatch latch = new CountDownLatch(1);
+ Watcher watcher = new Watcher()
+ {
+ @Override
+ public void process(WatchedEvent event)
+ {
+ if ( event.getType() == Event.EventType.NodeCreated )
+ {
+ latch.countDown();
+ }
+ }
+ };
+
+
removerClient.checkExists().usingWatcher(watcher).forPath("/yo");
+
Assert.assertEquals(removerClient.getRemovalManager().getEntries().size(), 1);
+ removerClient.create().forPath("/yo");
+
+ Assert.assertTrue(new Timing().awaitLatch(latch));
+
+
Assert.assertEquals(removerClient.getRemovalManager().getEntries().size(), 0);
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
+
+ @Test
+ public void testResetFromWatcher() throws Exception
+ {
+ Timing timing = new Timing();
+ CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new
RetryOneTime(1));
+ try
+ {
+ client.start();
+
+ final WatcherRemovalFacade removerClient =
(WatcherRemovalFacade)client.newWatcherRemoveCuratorFramework();
+
+ final CountDownLatch latch = new CountDownLatch(1);
+ Watcher watcher = new Watcher()
+ {
+ @Override
+ public void process(WatchedEvent event)
+ {
+ if ( event.getType() == Event.EventType.NodeCreated )
+ {
+ try
+ {
+
removerClient.checkExists().usingWatcher(this).forPath("/yo");
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+ else if ( event.getType() ==
Event.EventType.NodeDeleted )
+ {
+ latch.countDown();
+ }
+ }
+ };
+
+
removerClient.checkExists().usingWatcher(watcher).forPath("/yo");
+
Assert.assertEquals(removerClient.getRemovalManager().getEntries().size(), 1);
+ removerClient.create().forPath("/yo");
+
+ timing.sleepABit();
--- End diff --
done
> Use new Watcher Removal APIs in Curator Recipes
> -----------------------------------------------
>
> Key: CURATOR-217
> URL: https://issues.apache.org/jira/browse/CURATOR-217
> Project: Apache Curator
> Issue Type: Sub-task
> Components: Recipes
> Affects Versions: 3.0.0
> Reporter: Jordan Zimmerman
> Assignee: Jordan Zimmerman
> Fix For: 3.0.0
>
>
> Once the new Watcher Removal APIs are available, every Curator Recipe should
> be reviewed so that they clean up watchers as appropriate.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)