MAPREDUCE-3313. Fixed initialization of ClusterMetrics which was failing TestResourceTrackerService sometimes. Contributed by Hitesh Shah.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1195319 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1c8d64f38a
commit
273e092c93
|
@ -1865,6 +1865,9 @@ Release 0.23.0 - Unreleased
|
||||||
MAPREDUCE-3274. Fixed a race condition in MRAppMaster that was causing a
|
MAPREDUCE-3274. Fixed a race condition in MRAppMaster that was causing a
|
||||||
task-scheduling deadlock. (Robert Joseph Evans via vinodkv)
|
task-scheduling deadlock. (Robert Joseph Evans via vinodkv)
|
||||||
|
|
||||||
|
MAPREDUCE-3313. Fixed initialization of ClusterMetrics which was failing
|
||||||
|
TestResourceTrackerService sometimes. (Hitesh Shah via vinodkv)
|
||||||
|
|
||||||
Release 0.22.0 - Unreleased
|
Release 0.22.0 - Unreleased
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -20,6 +20,8 @@ package org.apache.hadoop.yarn.server.resourcemanager;
|
||||||
|
|
||||||
import static org.apache.hadoop.metrics2.lib.Interns.info;
|
import static org.apache.hadoop.metrics2.lib.Interns.info;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
import org.apache.hadoop.metrics2.MetricsInfo;
|
import org.apache.hadoop.metrics2.MetricsInfo;
|
||||||
import org.apache.hadoop.metrics2.MetricsSystem;
|
import org.apache.hadoop.metrics2.MetricsSystem;
|
||||||
|
@ -35,6 +37,8 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType;
|
||||||
@Metrics(context="yarn")
|
@Metrics(context="yarn")
|
||||||
public class ClusterMetrics {
|
public class ClusterMetrics {
|
||||||
|
|
||||||
|
private static AtomicBoolean isInitialized = new AtomicBoolean(false);
|
||||||
|
|
||||||
@Metric("# of NMs") MutableGaugeInt numNMs;
|
@Metric("# of NMs") MutableGaugeInt numNMs;
|
||||||
@Metric("# of decommissioned NMs") MutableCounterInt numDecommissionedNMs;
|
@Metric("# of decommissioned NMs") MutableCounterInt numDecommissionedNMs;
|
||||||
@Metric("# of lost NMs") MutableCounterInt numLostNMs;
|
@Metric("# of lost NMs") MutableCounterInt numLostNMs;
|
||||||
|
@ -48,11 +52,12 @@ public class ClusterMetrics {
|
||||||
private static MetricsRegistry registry;
|
private static MetricsRegistry registry;
|
||||||
|
|
||||||
public static ClusterMetrics getMetrics() {
|
public static ClusterMetrics getMetrics() {
|
||||||
if(INSTANCE == null){
|
if(!isInitialized.get()){
|
||||||
synchronized (ClusterMetrics.class) {
|
synchronized (ClusterMetrics.class) {
|
||||||
if(INSTANCE == null){
|
if(INSTANCE == null){
|
||||||
INSTANCE = new ClusterMetrics();
|
INSTANCE = new ClusterMetrics();
|
||||||
registerMetrics();
|
registerMetrics();
|
||||||
|
isInitialized.set(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.apache.hadoop.io.IOUtils;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
||||||
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
||||||
import org.apache.hadoop.yarn.api.records.NodeId;
|
import org.apache.hadoop.yarn.api.records.NodeId;
|
||||||
import org.apache.hadoop.yarn.exceptions.YarnRemoteException;
|
|
||||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||||
import org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest;
|
import org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest;
|
||||||
|
@ -67,8 +66,10 @@ public class TestResourceTrackerService {
|
||||||
|
|
||||||
MockNM nm1 = rm.registerNode("host1:1234", 5120);
|
MockNM nm1 = rm.registerNode("host1:1234", 5120);
|
||||||
MockNM nm2 = rm.registerNode("host2:5678", 10240);
|
MockNM nm2 = rm.registerNode("host2:5678", 10240);
|
||||||
int initialMetricCount = ClusterMetrics.getMetrics()
|
|
||||||
.getNumDecommisionedNMs();
|
ClusterMetrics metrics = ClusterMetrics.getMetrics();
|
||||||
|
assert(metrics != null);
|
||||||
|
int initialMetricCount = metrics.getNumDecommisionedNMs();
|
||||||
|
|
||||||
HeartbeatResponse nodeHeartbeat = nm1.nodeHeartbeat(true);
|
HeartbeatResponse nodeHeartbeat = nm1.nodeHeartbeat(true);
|
||||||
Assert.assertTrue(NodeAction.NORMAL.equals(nodeHeartbeat.getNodeAction()));
|
Assert.assertTrue(NodeAction.NORMAL.equals(nodeHeartbeat.getNodeAction()));
|
||||||
|
|
Loading…
Reference in New Issue