Browse Source

Merge -c 1491989 from trunk to branch-2.1-beta to fix YARN-767. Initialize application metrics at RM bootup. Contributed by Jian He.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2.1-beta@1491991 13f79535-47bb-0310-9956-ffa450edef68
Arun Murthy 12 years ago
parent
commit
3272df7593

+ 3 - 0
hadoop-yarn-project/CHANGES.txt

@@ -444,6 +444,9 @@ Release 2.1.0-beta - UNRELEASED
     YARN-760. NodeManager throws AvroRuntimeException on failed start.
     (Niranjan Singh via jlowe)
 
+    YARN-767. Initialize application metrics at RM bootup. (Jian He via
+    acmurthy) 
+
   BREAKDOWN OF HADOOP-8562 SUBTASKS AND RELATED JIRAS
 
     YARN-158. Yarn creating package-info.java must not depend on sh.

+ 4 - 3
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java

@@ -223,7 +223,10 @@ public class ResourceManager extends CompositeService implements Recoverable {
 
     this.resourceTracker = createResourceTrackerService();
     addService(resourceTracker);
-  
+
+    DefaultMetricsSystem.initialize("ResourceManager");
+    JvmMetrics.initSingleton("ResourceManager", null);
+
     try {
       this.scheduler.reinitialize(conf, this.rmContext);
     } catch (IOException ioe) {
@@ -598,8 +601,6 @@ public class ResourceManager extends CompositeService implements Recoverable {
     }
 
     startWepApp();
-    DefaultMetricsSystem.initialize("ResourceManager");
-    JvmMetrics.initSingleton("ResourceManager", null);
     try {
       rmDTSecretManager.startThreads();
     } catch(IOException ie) {

+ 13 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java

@@ -126,6 +126,18 @@ public class QueueMetrics implements MetricsSource {
                     enableUserMetrics, conf);
   }
 
+  // this method is here because we want to make sure these metrics show up on
+  // queue registration.
+  private void initMetrics() {
+    appsSubmitted.incr(0);
+    appsRunning.incr(0);
+    appsPending.incr(0);
+    appsCompleted.incr(0);
+    appsKilled.incr(0);
+    appsFailed.incr(0);
+    reservedContainers.incr(0);
+  }
+
   /**
    * Helper method to clear cache - used only for unit tests.
    */
@@ -156,6 +168,7 @@ public class QueueMetrics implements MetricsSource {
             ms.register(
                 sourceName(queueName).toString(), 
                 "Metrics for queue: " + queueName, metrics);
+        metrics.initMetrics();
       }
       queueMetrics.put(queueName, metrics);
     }

+ 14 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java

@@ -32,10 +32,14 @@ import org.apache.hadoop.metrics2.MetricsRecordBuilder;
 import org.apache.hadoop.metrics2.MetricsSource;
 import org.apache.hadoop.metrics2.MetricsSystem;
 import org.apache.hadoop.metrics2.impl.MetricsSystemImpl;
+import org.apache.hadoop.test.MetricsAsserts;
 import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.resource.Resources;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.utils.BuilderUtils;
 import org.junit.Assert;
 import org.junit.Before;
@@ -264,6 +268,16 @@ public class TestQueueMetrics {
     }
   }
 
+  @Test
+  public void testMetricsInitializedOnRMInit() {
+    YarnConfiguration conf = new YarnConfiguration();
+    conf.setClass(YarnConfiguration.RM_SCHEDULER,
+      FifoScheduler.class, ResourceScheduler.class);
+    MockRM rm = new MockRM(conf);
+    QueueMetrics metrics = rm.getResourceScheduler().getRootQueueMetrics();
+    checkApps(metrics, 0, 0, 0, 0, 0, 0);
+    MetricsAsserts.assertGauge("ReservedContainers", 0, metrics);
+  }
 
   public static void checkApps(MetricsSource source, int submitted, int pending,
       int running, int completed, int failed, int killed) {

+ 2 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java

@@ -39,6 +39,7 @@ import javax.xml.parsers.ParserConfigurationException;
 import junit.framework.Assert;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
 import org.apache.hadoop.security.authorize.AccessControlList;
 import org.apache.hadoop.yarn.Clock;
 import org.apache.hadoop.yarn.MockApps;
@@ -133,6 +134,7 @@ public class TestFairScheduler {
     scheduler = null;
     resourceManager = null;
     QueueMetrics.clearQueueMetrics();
+    DefaultMetricsSystem.shutdown();
   }
 
   private Configuration createConfiguration() {