[
https://issues.apache.org/jira/browse/CURATOR-710?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kezhu Wang reassigned CURATOR-710:
----------------------------------
Assignee: Kezhu Wang
> 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)