[ https://issues.apache.org/jira/browse/CURATOR-654?focusedWorklogId=818441&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-818441 ]
ASF GitHub Bot logged work on CURATOR-654: ------------------------------------------ Author: ASF GitHub Bot Created on: 19/Oct/22 11:58 Start Date: 19/Oct/22 11:58 Worklog Time Spent: 10m Work Description: tisonkun commented on code in PR #435: URL: https://github.com/apache/curator/pull/435#discussion_r999343775 ########## curator-recipes/src/test/java/org/apache/curator/framework/recipes/barriers/TestDistributedBarrier.java: ########## @@ -218,4 +230,48 @@ public Object call() throws Exception client.close(); } } + + @Test + public void testIsSet() throws Exception + { + try (CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1))) { + client.start(); + + final DistributedBarrier barrier = new DistributedBarrier(client, "/barrier"); + barrier.setBarrier(); + + assertTrue(barrier.isSet()); + } + } + + @Test + public void testIsNotSet() throws Exception + { + try (CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1))) { + client.start(); + + final DistributedBarrier barrier = new DistributedBarrier(client, "/barrier"); + barrier.setBarrier(); + barrier.removeBarrier(); + + assertFalse(barrier.isSet()); + } + } + + @Test + public void testWatchersRemoved() throws Exception + { + CuratorFramework client = mock(CuratorFramework.class); + WatcherRemoveCuratorFramework watcherRemoveClient = mock(WatcherRemoveCuratorFramework.class); + ExistsBuilder existsBuilder = mock(ExistsBuilder.class); + + when(client.newWatcherRemoveCuratorFramework()).thenReturn(watcherRemoveClient); + when(watcherRemoveClient.checkExists()).thenReturn(existsBuilder); + when(existsBuilder.usingWatcher(any(Watcher.class))).thenReturn(existsBuilder); + + final DistributedBarrier barrier = new DistributedBarrier(client, "/barrier"); + barrier.waitOnBarrier(1, TimeUnit.SECONDS); + verify(watcherRemoveClient, atLeastOnce()).removeWatchers(); + } Review Comment: @kezhuw I agree that it can be a bug as I mentioned in https://lists.apache.org/thread/0kcnklcxs0s5656c1sbh3crgdodbb0qg. You can reply on the mailing list and file an issue. Issue Time Tracking ------------------- Worklog Id: (was: 818441) Time Spent: 40m (was: 0.5h) > DistributedBarrier watcher leak > ------------------------------- > > Key: CURATOR-654 > URL: https://issues.apache.org/jira/browse/CURATOR-654 > Project: Apache Curator > Issue Type: Bug > Components: Recipes > Affects Versions: 5.3.0 > Reporter: Stuart Scott > Priority: Major > Attachments: > CURATOR-654__Remove_watchers_after_waiting_for_barrier_.patch > > Time Spent: 40m > Remaining Estimate: 0h > > The DistributedBarrier adds a zookeeper exists watcher in the waitOnBarrier() > method. It appears as though the watcher is never removed. In a system where > DistributedBarriers are used heavily this eventually results in the system > running out of memory. -- This message was sent by Atlassian Jira (v8.20.10#820010)