git commit: HADOOP-11105. MetricsSystemImpl could leak memory in registered callbacks. Contributed by Chuan Liu.

2014-09-18 Thread cnauroth
Repository: hadoop
Updated Branches:
  refs/heads/trunk 2c3da25fd - 1942364ef


HADOOP-11105. MetricsSystemImpl could leak memory in registered callbacks. 
Contributed by Chuan Liu.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1942364e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1942364e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1942364e

Branch: refs/heads/trunk
Commit: 1942364ef14396e9bd94a87c0d901ff9abe1d42a
Parents: 2c3da25
Author: cnauroth cnaur...@apache.org
Authored: Thu Sep 18 15:36:43 2014 -0700
Committer: cnauroth cnaur...@apache.org
Committed: Thu Sep 18 15:36:43 2014 -0700

--
 .../hadoop/metrics2/impl/MetricsSystemImpl.java | 35 
 1 file changed, 28 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hadoop/blob/1942364e/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
--
diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
index 722abd9..2107e68 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
@@ -83,7 +83,12 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   private final MapString, MetricsSource allSources;
   private final MapString, MetricsSinkAdapter sinks;
   private final MapString, MetricsSink allSinks;
+
+  // The callback list is used by register(Callback callback), while
+  // the callback map is used by register(String name, String desc, T sink)
   private final ListCallback callbacks;
+  private final MapString, Callback namedCallbacks;
+
   private final MetricsCollectorImpl collector;
   private final MetricsRegistry registry = new MetricsRegistry(MS_NAME);
   @Metric({Snapshot, Snapshot stats}) MutableStat snapshotStat;
@@ -119,6 +124,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 sourceConfigs = Maps.newHashMap();
 sinkConfigs = Maps.newHashMap();
 callbacks = Lists.newArrayList();
+namedCallbacks = Maps.newHashMap();
 injectedTags = Lists.newArrayList();
 collector = new MetricsCollectorImpl();
 if (prefix != null) {
@@ -178,11 +184,13 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   return;
 }
 for (Callback cb : callbacks) cb.preStart();
+for (Callback cb : namedCallbacks.values()) cb.preStart();
 configure(prefix);
 startTimer();
 monitoring = true;
 LOG.info(prefix + metrics system started);
 for (Callback cb : callbacks) cb.postStart();
+for (Callback cb : namedCallbacks.values()) cb.postStart();
   }
 
   @Override
@@ -198,6 +206,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   return;
 }
 for (Callback cb : callbacks) cb.preStop();
+for (Callback cb : namedCallbacks.values()) cb.preStop();
 LOG.info(Stopping + prefix + metrics system...);
 stopTimer();
 stopSources();
@@ -206,6 +215,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 monitoring = false;
 LOG.info(prefix + metrics system stopped.);
 for (Callback cb : callbacks) cb.postStop();
+for (Callback cb : namedCallbacks.values()) cb.postStop();
   }
 
   @Override public synchronized T
@@ -224,7 +234,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 }
 // We want to re-register the source to pick up new config when the
 // metrics system restarts.
-register(new AbstractCallback() {
+register(name, new AbstractCallback() {
   @Override public void postStart() {
 registerSource(finalName, finalDesc, s);
   }
@@ -241,6 +251,9 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 if (allSources.containsKey(name)) {
   allSources.remove(name);
 }
+if (namedCallbacks.containsKey(name)) {
+  namedCallbacks.remove(name);
+}
   }
 
   synchronized
@@ -268,7 +281,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 }
 // We want to re-register the sink to pick up new config
 // when the metrics system restarts.
-register(new AbstractCallback() {
+register(name, new AbstractCallback() {
   @Override public void postStart() {
 register(name, description, sink);
   }
@@ -289,9 

[09/12] git commit: HADOOP-11105. MetricsSystemImpl could leak memory in registered callbacks. Contributed by Chuan Liu.

2014-09-18 Thread arp
HADOOP-11105. MetricsSystemImpl could leak memory in registered callbacks. 
Contributed by Chuan Liu.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1942364e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1942364e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1942364e

Branch: refs/heads/HDFS-6581
Commit: 1942364ef14396e9bd94a87c0d901ff9abe1d42a
Parents: 2c3da25
Author: cnauroth cnaur...@apache.org
Authored: Thu Sep 18 15:36:43 2014 -0700
Committer: cnauroth cnaur...@apache.org
Committed: Thu Sep 18 15:36:43 2014 -0700

--
 .../hadoop/metrics2/impl/MetricsSystemImpl.java | 35 
 1 file changed, 28 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hadoop/blob/1942364e/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
--
diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
index 722abd9..2107e68 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
@@ -83,7 +83,12 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   private final MapString, MetricsSource allSources;
   private final MapString, MetricsSinkAdapter sinks;
   private final MapString, MetricsSink allSinks;
+
+  // The callback list is used by register(Callback callback), while
+  // the callback map is used by register(String name, String desc, T sink)
   private final ListCallback callbacks;
+  private final MapString, Callback namedCallbacks;
+
   private final MetricsCollectorImpl collector;
   private final MetricsRegistry registry = new MetricsRegistry(MS_NAME);
   @Metric({Snapshot, Snapshot stats}) MutableStat snapshotStat;
@@ -119,6 +124,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 sourceConfigs = Maps.newHashMap();
 sinkConfigs = Maps.newHashMap();
 callbacks = Lists.newArrayList();
+namedCallbacks = Maps.newHashMap();
 injectedTags = Lists.newArrayList();
 collector = new MetricsCollectorImpl();
 if (prefix != null) {
@@ -178,11 +184,13 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   return;
 }
 for (Callback cb : callbacks) cb.preStart();
+for (Callback cb : namedCallbacks.values()) cb.preStart();
 configure(prefix);
 startTimer();
 monitoring = true;
 LOG.info(prefix + metrics system started);
 for (Callback cb : callbacks) cb.postStart();
+for (Callback cb : namedCallbacks.values()) cb.postStart();
   }
 
   @Override
@@ -198,6 +206,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
   return;
 }
 for (Callback cb : callbacks) cb.preStop();
+for (Callback cb : namedCallbacks.values()) cb.preStop();
 LOG.info(Stopping + prefix + metrics system...);
 stopTimer();
 stopSources();
@@ -206,6 +215,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 monitoring = false;
 LOG.info(prefix + metrics system stopped.);
 for (Callback cb : callbacks) cb.postStop();
+for (Callback cb : namedCallbacks.values()) cb.postStop();
   }
 
   @Override public synchronized T
@@ -224,7 +234,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 }
 // We want to re-register the source to pick up new config when the
 // metrics system restarts.
-register(new AbstractCallback() {
+register(name, new AbstractCallback() {
   @Override public void postStart() {
 registerSource(finalName, finalDesc, s);
   }
@@ -241,6 +251,9 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 if (allSources.containsKey(name)) {
   allSources.remove(name);
 }
+if (namedCallbacks.containsKey(name)) {
+  namedCallbacks.remove(name);
+}
   }
 
   synchronized
@@ -268,7 +281,7 @@ public class MetricsSystemImpl extends MetricsSystem 
implements MetricsSource {
 }
 // We want to re-register the sink to pick up new config
 // when the metrics system restarts.
-register(new AbstractCallback() {
+register(name, new AbstractCallback() {
   @Override public void postStart() {
 register(name, description, sink);
   }
@@ -289,9 +302,16 @@ public class MetricsSystemImpl extends MetricsSystem 
implements