Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8404E10144 for ; Mon, 15 Dec 2014 20:00:20 +0000 (UTC) Received: (qmail 53981 invoked by uid 500); 15 Dec 2014 20:00:20 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 53897 invoked by uid 500); 15 Dec 2014 20:00:20 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 53881 invoked by uid 99); 15 Dec 2014 20:00:20 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Dec 2014 20:00:20 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id C9EA99C8083; Mon, 15 Dec 2014 20:00:19 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: kasha@apache.org To: common-commits@hadoop.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: hadoop git commit: YARN-2914. [YARN-1492] Potential race condition in Singleton implementation of SharedCacheUploaderMetrics, CleanerMetrics, ClientSCMMetrics. (Varun Saxena via kasha) Date: Mon, 15 Dec 2014 20:00:19 +0000 (UTC) Repository: hadoop Updated Branches: refs/heads/trunk e8a67bed1 -> e597249d3 YARN-2914. [YARN-1492] Potential race condition in Singleton implementation of SharedCacheUploaderMetrics, CleanerMetrics, ClientSCMMetrics. (Varun Saxena via kasha) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e597249d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e597249d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e597249d Branch: refs/heads/trunk Commit: e597249d361bbe8383fb9b564eacda7c990b781d Parents: e8a67be Author: Karthik Kambatla Authored: Mon Dec 15 12:00:12 2014 -0800 Committer: Karthik Kambatla Committed: Mon Dec 15 12:00:12 2014 -0800 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 ++ .../sharedcachemanager/CleanerService.java | 2 +- .../ClientProtocolService.java | 2 +- .../SharedCacheUploaderService.java | 2 +- .../metrics/CleanerMetrics.java | 30 +++---------------- .../metrics/ClientSCMMetrics.java | 31 +++----------------- .../metrics/SharedCacheUploaderMetrics.java | 29 ++---------------- .../metrics/TestCleanerMetrics.java | 1 - 8 files changed, 17 insertions(+), 83 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 4edf8a1..e235f78 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -225,6 +225,9 @@ Release 2.7.0 - UNRELEASED YARN-2356. yarn status command for non-existent application/application attempt/container is too verbose. (Sunil G via devaraj) + YARN-2914. [YARN-1492] Potential race condition in Singleton implementation of + SharedCacheUploaderMetrics, CleanerMetrics, ClientSCMMetrics. (Varun Saxena via kasha) + Release 2.6.0 - 2014-11-18 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java index 593be4a..6748387 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java @@ -91,7 +91,7 @@ public class CleanerService extends CompositeService { "It appears there is another CleanerService running in the cluster"); } - this.metrics = CleanerMetrics.initSingleton(conf); + this.metrics = CleanerMetrics.getInstance(); // Start dependent services (i.e. AppChecker) super.serviceStart(); http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/ClientProtocolService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/ClientProtocolService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/ClientProtocolService.java index bd13573..1dcca6c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/ClientProtocolService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/ClientProtocolService.java @@ -94,7 +94,7 @@ public class ClientProtocolService extends AbstractService implements @Override protected void serviceStart() throws Exception { Configuration conf = getConfig(); - this.metrics = ClientSCMMetrics.initSingleton(conf); + this.metrics = ClientSCMMetrics.getInstance(); YarnRPC rpc = YarnRPC.create(conf); this.server = http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/SharedCacheUploaderService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/SharedCacheUploaderService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/SharedCacheUploaderService.java index f949438..dd87b67 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/SharedCacheUploaderService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/SharedCacheUploaderService.java @@ -72,7 +72,7 @@ public class SharedCacheUploaderService extends AbstractService @Override protected void serviceStart() throws Exception { Configuration conf = getConfig(); - this.metrics = SharedCacheUploaderMetrics.initSingleton(conf); + this.metrics = SharedCacheUploaderMetrics.getInstance(); YarnRPC rpc = YarnRPC.create(conf); this.server = http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/CleanerMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/CleanerMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/CleanerMetrics.java index 5c8ea3d..b86a469 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/CleanerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/CleanerMetrics.java @@ -21,7 +21,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Evolving; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.metrics2.MetricsSource; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.annotation.Metric; @@ -43,31 +42,10 @@ import org.apache.hadoop.metrics2.lib.MutableGaugeLong; public class CleanerMetrics { public static final Log LOG = LogFactory.getLog(CleanerMetrics.class); private final MetricsRegistry registry = new MetricsRegistry("cleaner"); - - enum Singleton { - INSTANCE; - - CleanerMetrics impl; - - synchronized CleanerMetrics init(Configuration conf) { - if (impl == null) { - impl = create(conf); - } - return impl; - } - } - - public static CleanerMetrics initSingleton(Configuration conf) { - return Singleton.INSTANCE.init(conf); - } - + private final static CleanerMetrics INSTANCE = create(); + public static CleanerMetrics getInstance() { - CleanerMetrics topMetrics = Singleton.INSTANCE.impl; - if (topMetrics == null) - throw new IllegalStateException( - "The CleanerMetics singlton instance is not initialized." - + " Have you called init first?"); - return topMetrics; + return INSTANCE; } @Metric("number of deleted files over all runs") @@ -120,7 +98,7 @@ public class CleanerMetrics { */ MetricsSource metricSource; - static CleanerMetrics create(Configuration conf) { + static CleanerMetrics create() { MetricsSystem ms = DefaultMetricsSystem.instance(); CleanerMetrics metricObject = new CleanerMetrics(); http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/ClientSCMMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/ClientSCMMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/ClientSCMMetrics.java index 3ae88e0..fe960c6 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/ClientSCMMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/ClientSCMMetrics.java @@ -21,7 +21,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Unstable; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.annotation.Metric; import org.apache.hadoop.metrics2.annotation.Metrics; @@ -40,37 +39,15 @@ public class ClientSCMMetrics { private static final Log LOG = LogFactory.getLog(ClientSCMMetrics.class); final MetricsRegistry registry; + private final static ClientSCMMetrics INSTANCE = create(); - ClientSCMMetrics() { + private ClientSCMMetrics() { registry = new MetricsRegistry("clientRequests"); LOG.debug("Initialized " + registry); } - - enum Singleton { - INSTANCE; - - ClientSCMMetrics impl; - - synchronized ClientSCMMetrics init(Configuration conf) { - if (impl == null) { - impl = create(); - } - return impl; - } - } - - public static ClientSCMMetrics initSingleton(Configuration conf) { - return Singleton.INSTANCE.init(conf); - } - + public static ClientSCMMetrics getInstance() { - ClientSCMMetrics topMetrics = Singleton.INSTANCE.impl; - if (topMetrics == null) { - throw new IllegalStateException( - "The ClientSCMMetrics singleton instance is not initialized." - + " Have you called init first?"); - } - return topMetrics; + return INSTANCE; } static ClientSCMMetrics create() { http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/SharedCacheUploaderMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/SharedCacheUploaderMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/SharedCacheUploaderMetrics.java index 6fd816f..7fff13a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/SharedCacheUploaderMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/SharedCacheUploaderMetrics.java @@ -21,7 +21,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Evolving; -import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.annotation.Metric; import org.apache.hadoop.metrics2.annotation.Metrics; @@ -41,37 +40,15 @@ public class SharedCacheUploaderMetrics { static final Log LOG = LogFactory.getLog(SharedCacheUploaderMetrics.class); final MetricsRegistry registry; + private final static SharedCacheUploaderMetrics INSTANCE = create(); - SharedCacheUploaderMetrics() { + private SharedCacheUploaderMetrics() { registry = new MetricsRegistry("SharedCacheUploaderRequests"); LOG.debug("Initialized "+ registry); } - enum Singleton { - INSTANCE; - - SharedCacheUploaderMetrics impl; - - synchronized SharedCacheUploaderMetrics init(Configuration conf) { - if (impl == null) { - impl = create(); - } - return impl; - } - } - - public static SharedCacheUploaderMetrics - initSingleton(Configuration conf) { - return Singleton.INSTANCE.init(conf); - } - public static SharedCacheUploaderMetrics getInstance() { - SharedCacheUploaderMetrics topMetrics = Singleton.INSTANCE.impl; - if (topMetrics == null) - throw new IllegalStateException( - "The SharedCacheUploaderMetrics singleton instance is not" - + "initialized. Have you called init first?"); - return topMetrics; + return INSTANCE; } static SharedCacheUploaderMetrics create() { http://git-wip-us.apache.org/repos/asf/hadoop/blob/e597249d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/test/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/TestCleanerMetrics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/test/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/TestCleanerMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/test/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/TestCleanerMetrics.java index 26ab179..cca3f42 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/test/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/TestCleanerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/test/java/org/apache/hadoop/yarn/server/sharedcachemanager/metrics/TestCleanerMetrics.java @@ -30,7 +30,6 @@ public class TestCleanerMetrics { @Before public void init() { - CleanerMetrics.initSingleton(conf); cleanerMetrics = CleanerMetrics.getInstance(); }