You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2014/05/23 17:07:29 UTC
[28/29] git commit: Nulling the watchers seems to help free more
memory. I don't understand why. TODO for another day
Nulling the watchers seems to help free more memory. I don't understand why. TODO for another day
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/9b9b9ae9
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/9b9b9ae9
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/9b9b9ae9
Branch: refs/heads/CURATOR-105
Commit: 9b9b9ae96c9c5fa423b263aba3768fc16c77a794
Parents: 0bffdb0
Author: randgalt <ra...@apache.org>
Authored: Fri May 23 10:06:39 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Fri May 23 10:06:39 2014 -0500
----------------------------------------------------------------------
.../recipes/cache/PathChildrenCache.java | 9 ++-
.../x/discovery/ServiceCacheLeakTest.java | 61 --------------------
.../x/discovery/ServiceCacheLeakTester.java | 61 ++++++++++++++++++++
3 files changed, 65 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/9b9b9ae9/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
index 04de09b..dd41b5f 100644
--- a/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
+++ b/curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
@@ -91,7 +91,7 @@ public class PathChildrenCache implements Closeable
private static final boolean USE_EXISTS = Boolean.getBoolean("curator-path-children-cache-use-exists");
- private final Watcher childrenWatcher = new Watcher()
+ private volatile Watcher childrenWatcher = new Watcher()
{
@Override
public void process(WatchedEvent event)
@@ -373,13 +373,12 @@ public class PathChildrenCache implements Closeable
client.clearWatcherReferences(childrenWatcher);
client.clearWatcherReferences(dataWatcher);
-/*
- This seems to enable even more GC - I'm not sure why yet
-
+ // TODO
+ // This seems to enable even more GC - I'm not sure why yet - it
+ // has something to do with Guava's cache and circular references
connectionStateListener = null;
childrenWatcher = null;
dataWatcher = null;
-*/
}
}
http://git-wip-us.apache.org/repos/asf/curator/blob/9b9b9ae9/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTest.java
----------------------------------------------------------------------
diff --git a/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTest.java b/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTest.java
deleted file mode 100644
index a8c130c..0000000
--- a/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.apache.curator.x.discovery;
-
-import org.apache.curator.framework.CuratorFramework;
-import org.apache.curator.framework.CuratorFrameworkFactory;
-import org.apache.curator.retry.RetryOneTime;
-import org.apache.curator.test.TestingServer;
-import org.apache.curator.utils.CloseableUtils;
-import org.apache.curator.x.discovery.strategies.RandomStrategy;
-import org.testng.annotations.Test;
-
-public class ServiceCacheLeakTest
-{
- @Test
- public void serviceCacheInstancesLeaked() throws Exception
- {
- TestingServer testingServer = new TestingServer();
-
- final CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(testingServer.getConnectString(), new RetryOneTime(1));
- try
- {
- curatorFramework.start();
-
- doWork(curatorFramework);
- System.gc();
-
- System.out.println("Done - get dump");
- Thread.currentThread().join();
- }
- finally
- {
- CloseableUtils.closeQuietly(curatorFramework);
- CloseableUtils.closeQuietly(testingServer);
- }
- }
-
- private void doWork(CuratorFramework curatorFramework) throws Exception
- {
- ServiceInstance<Void> thisInstance = ServiceInstance.<Void>builder().name("myservice").build();
- final ServiceDiscovery<Void> serviceDiscovery = ServiceDiscoveryBuilder.builder(Void.class).client(curatorFramework.usingNamespace("dev")).basePath("/instances").thisInstance(thisInstance).build();
- serviceDiscovery.start();
-
- for ( int i = 0; i < 100000; i++ )
- {
- final ServiceProvider<Void> s = serviceProvider(serviceDiscovery, "myservice");
- s.start();
- try
- {
- s.getInstance().buildUriSpec();
- }
- finally
- {
- s.close();
- }
- }
- }
-
- private ServiceProvider<Void> serviceProvider(ServiceDiscovery<Void> serviceDiscovery, String name) throws Exception
- {
- return serviceDiscovery.serviceProviderBuilder().serviceName(name).providerStrategy(new RandomStrategy<Void>()).build();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/curator/blob/9b9b9ae9/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTester.java
----------------------------------------------------------------------
diff --git a/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTester.java b/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTester.java
new file mode 100644
index 0000000..b4e08d1
--- /dev/null
+++ b/curator-x-discovery/src/test/java/org/apache/curator/x/discovery/ServiceCacheLeakTester.java
@@ -0,0 +1,61 @@
+package org.apache.curator.x.discovery;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.test.TestingServer;
+import org.apache.curator.utils.CloseableUtils;
+import org.apache.curator.x.discovery.strategies.RandomStrategy;
+import org.testng.annotations.Test;
+
+public class ServiceCacheLeakTester
+{
+ @Test
+ public void serviceCacheInstancesLeaked() throws Exception
+ {
+ TestingServer testingServer = new TestingServer();
+
+ final CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(testingServer.getConnectString(), new RetryOneTime(1));
+ try
+ {
+ curatorFramework.start();
+
+ doWork(curatorFramework);
+ System.gc();
+
+ System.out.println("Done - get dump");
+ Thread.currentThread().join();
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(curatorFramework);
+ CloseableUtils.closeQuietly(testingServer);
+ }
+ }
+
+ private void doWork(CuratorFramework curatorFramework) throws Exception
+ {
+ ServiceInstance<Void> thisInstance = ServiceInstance.<Void>builder().name("myservice").build();
+ final ServiceDiscovery<Void> serviceDiscovery = ServiceDiscoveryBuilder.builder(Void.class).client(curatorFramework.usingNamespace("dev")).basePath("/instances").thisInstance(thisInstance).build();
+ serviceDiscovery.start();
+
+ for ( int i = 0; i < 100000; i++ )
+ {
+ final ServiceProvider<Void> s = serviceProvider(serviceDiscovery, "myservice");
+ s.start();
+ try
+ {
+ s.getInstance().buildUriSpec();
+ }
+ finally
+ {
+ s.close();
+ }
+ }
+ }
+
+ private ServiceProvider<Void> serviceProvider(ServiceDiscovery<Void> serviceDiscovery, String name) throws Exception
+ {
+ return serviceDiscovery.serviceProviderBuilder().serviceName(name).providerStrategy(new RandomStrategy<Void>()).build();
+ }
+}
\ No newline at end of file