You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ka...@apache.org on 2014/12/15 21:00:19 UTC
hadoop git commit: YARN-2914. [YARN-1492] Potential race condition in
Singleton implementation of SharedCacheUploaderMetrics, CleanerMetrics,
ClientSCMMetrics. (Varun Saxena via kasha)
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 <ka...@apache.org>
Authored: Mon Dec 15 12:00:12 2014 -0800
Committer: Karthik Kambatla <ka...@apache.org>
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();
}