[ 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)