HADOOP-7529. Fix lock cycles in metrics system. (llu)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1157187 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d5ef72e8c1
commit
7d612e9325
@ -493,6 +493,8 @@ Trunk (unreleased changes)
|
|||||||
|
|
||||||
HADOOP-6622. Token should not print the password in toString. (eli)
|
HADOOP-6622. Token should not print the password in toString. (eli)
|
||||||
|
|
||||||
|
HADOOP-7529. Fix lock cycles in metrics system. (llu)
|
||||||
|
|
||||||
Release 0.22.0 - Unreleased
|
Release 0.22.0 - Unreleased
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.apache.hadoop.metrics2.lib;
|
package org.apache.hadoop.metrics2.lib;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import javax.management.ObjectName;
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
@ -34,7 +35,8 @@
|
|||||||
public enum DefaultMetricsSystem {
|
public enum DefaultMetricsSystem {
|
||||||
INSTANCE; // the singleton
|
INSTANCE; // the singleton
|
||||||
|
|
||||||
private MetricsSystem impl = new MetricsSystemImpl();
|
private AtomicReference<MetricsSystem> impl =
|
||||||
|
new AtomicReference<MetricsSystem>(new MetricsSystemImpl());
|
||||||
volatile boolean miniClusterMode = false;
|
volatile boolean miniClusterMode = false;
|
||||||
final UniqueNames mBeanNames = new UniqueNames();
|
final UniqueNames mBeanNames = new UniqueNames();
|
||||||
final UniqueNames sourceNames = new UniqueNames();
|
final UniqueNames sourceNames = new UniqueNames();
|
||||||
@ -48,8 +50,8 @@ public static MetricsSystem initialize(String prefix) {
|
|||||||
return INSTANCE.init(prefix);
|
return INSTANCE.init(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized MetricsSystem init(String prefix) {
|
MetricsSystem init(String prefix) {
|
||||||
return impl.init(prefix);
|
return impl.get().init(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,8 +68,9 @@ public static void shutdown() {
|
|||||||
INSTANCE.shutdownInstance();
|
INSTANCE.shutdownInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized void shutdownInstance() {
|
void shutdownInstance() {
|
||||||
if (impl.shutdown()) {
|
boolean last = impl.get().shutdown();
|
||||||
|
if (last) synchronized(this) {
|
||||||
mBeanNames.map.clear();
|
mBeanNames.map.clear();
|
||||||
sourceNames.map.clear();
|
sourceNames.map.clear();
|
||||||
}
|
}
|
||||||
@ -78,13 +81,11 @@ public static MetricsSystem setInstance(MetricsSystem ms) {
|
|||||||
return INSTANCE.setImpl(ms);
|
return INSTANCE.setImpl(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized MetricsSystem setImpl(MetricsSystem ms) {
|
MetricsSystem setImpl(MetricsSystem ms) {
|
||||||
MetricsSystem old = impl;
|
return impl.getAndSet(ms);
|
||||||
impl = ms;
|
|
||||||
return old;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized MetricsSystem getImpl() { return impl; }
|
MetricsSystem getImpl() { return impl.get(); }
|
||||||
|
|
||||||
@InterfaceAudience.Private
|
@InterfaceAudience.Private
|
||||||
public static void setMiniClusterMode(boolean choice) {
|
public static void setMiniClusterMode(boolean choice) {
|
||||||
|
Loading…
Reference in New Issue
Block a user