Jochem Wichers Hoeth created CURATOR-710:
--------------------------------------------

             Summary: EnsembleTracker leaking watch
                 Key: CURATOR-710
                 URL: https://issues.apache.org/jira/browse/CURATOR-710
             Project: Apache Curator
          Issue Type: Bug
          Components: Framework
    Affects Versions: 5.6.0
            Reporter: Jochem Wichers Hoeth


EnsembleTracker registers a watch on /zookeeper/config (via 
GetConfigBuilderImpl). It uses WatcherRemovalManager to automatically remove 
this watch when closed. In Curator 5.6.0 this mechanism broke, and the watch no 
longer gets removed when EnsembleTracker is closed.

*Technical details*

To enable the WatcherRemovalManager, EnsembleTracker wraps its client in a 
WatcherRemovalFacade here: 
[code|https://github.com/apache/curator/blob/a9a8020918c345fb6c3c0a099a27189cbd7cf819/curator-framework/src/main/java/org/apache/curator/framework/imps/EnsembleTracker.java#L88].
 It passes this wrapped client to GetConfigBuilderImpl. In Curator 5.5.0 and 
earlier, GetConfigBuilderImpl would use this client directly. But since [#474| 
https://github.com/apache/curator/pull/474/files] got merged into 5.6.0, it 
calls client.usingNamespace() which returns a NamespaceFacade that wraps the 
_underlying_ CuratorFrameworkImpl client. So now when GetConfigBuilderImpl adds 
a watch through its client, that call no longer passed through 
WatcherRemovalManager. And when EnsembleTracker calls client.removeWatchers() 
on close, the WatcherRemovalManager doesn't remove the watch anymore because it 
isn't aware that it exists.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to