[ https://issues.apache.org/jira/browse/CURATOR-312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavan Kumar M S resolved CURATOR-312. ------------------------------------- Resolution: Fixed > Memory leak of NamespaceWatcher when register TreeCacheListener to > non-existing path > ------------------------------------------------------------------------------------ > > Key: CURATOR-312 > URL: https://issues.apache.org/jira/browse/CURATOR-312 > Project: Apache Curator > Issue Type: Bug > Components: Recipes > Affects Versions: 2.8.0 > Environment: Suse Linux + JDK 1.8 > Windows 7 + JDK 1.7 > Reporter: Pavan Kumar M S > Assignee: Scott Blum > Fix For: awaiting-response > > > Hi, > > As per the Curator API document its allowed to register the > TreeCacheListener to the path which is not present in the broker, but when we > try to register its found that object 'NamespaceWatcher' keep on increasing > and leading to out of memory in very short time. > Following is the sample code which can be used to reproduce the issue. > import org.apache.curator.framework.CuratorFramework; > import org.apache.curator.framework.CuratorFrameworkFactory; > import org.apache.curator.framework.CuratorFrameworkFactory.Builder; > import org.apache.curator.framework.recipes.cache.TreeCache; > import org.apache.curator.framework.recipes.cache.TreeCacheEvent; > import org.apache.curator.framework.recipes.cache.TreeCacheListener; > import org.apache.curator.retry.RetryNTimes; > public class TreeCacheProblem > { > private static final int RETRYTIMES = 3; > private static final int RETRYINTERVAL = 1000; > private static final int CONNECTION_TIME_OUT = 3000; > private static final int SESSION_TIME_OUT = 5000; > public static void main ( String [] args ) throws Exception > { > TreeCacheProblem treeCache = new TreeCacheProblem(); > treeCache.init ( "10.18.104.149:2189" ); > String zkPath = "/home/sample"; > treeCache.addTreeCacheListener ( zkPath, new TreeCacheListener(){ > public void childEvent ( CuratorFramework client, TreeCacheEvent > event ) > throws Exception > { > System.out.println (event); > } > }); > System.in.read(); > } > private CuratorFramework client; > private void init ( String zkURL ) > { > Builder connect = CuratorFrameworkFactory.builder ().connectString ( > zkURL ); > this.client = connect.retryPolicy ( new RetryNTimes ( RETRYTIMES, > RETRYINTERVAL ) ) > .connectionTimeoutMs ( CONNECTION_TIME_OUT ).sessionTimeoutMs ( > SESSION_TIME_OUT ) > .build (); > this.client.start (); > } > public void addTreeCacheListener ( String zkPath, TreeCacheListener > treeCacheListener ) throws Exception > { > org.apache.curator.framework.recipes.cache.TreeCache.Builder builder > = TreeCache > .newBuilder ( client, zkPath ); > builder.setCacheData ( true ); > TreeCache treeCache = builder.build (); > treeCache.getListenable ().addListener ( treeCacheListener ); > treeCache.start (); > } > } > Curator API Doc for reference > https://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/TreeCache.html > public TreeCache(CuratorFramework client, > String path) > Create a TreeCache for the given client and path with default options. > If the client is namespaced, all operations on the resulting TreeCache will > be in terms of the namespace, including all published events. The given path > is the root at which the TreeCache will watch and explore. If no node exists > at the given path, the TreeCache will be initially empty. > Parameters: > client - the client to use; may be namespaced > path - the path to the root node to watch/explore; this path need not > actually exist on the server > See Also: > newBuilder(CuratorFramework, String) > With Regards, > Pavan -- This message was sent by Atlassian JIRA (v6.3.4#6332)