[ 
https://issues.apache.org/jira/browse/CURATOR-710?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kezhu Wang resolved CURATOR-710.
--------------------------------
    Resolution: Fixed

master: fb78e23d5228c7c5c850a2aa638c7e11caa931e9

> 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
>            Assignee: Kezhu Wang
>            Priority: Minor
>             Fix For: 5.8.0
>
>
> 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