diff --git hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java index 2224d81..259d329 100644 --- hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java +++ hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java @@ -381,7 +381,7 @@ synchronized MetricsBuffer sampleMetrics() { private void snapshotMetrics(MetricsSourceAdapter sa, MetricsBufferBuilder bufferBuilder) { long startTime = Time.now(); - bufferBuilder.add(sa.name(), sa.getMetrics(collector, false)); + bufferBuilder.add(sa.name(), sa.getMetrics(collector, true)); collector.clear(); snapshotStat.add(Time.now() - startTime); LOG.debug("Snapshotted source "+ sa.name()); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java index b9ffc26..9d2c739 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java +++ 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,18 +126,6 @@ static QueueMetrics forQueue(String queueName, Queue parent, enableUserMetrics, conf); } - // this method is here because we want to make sure these metrics show up on - // queue registration. - public 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. */ @@ -168,7 +156,6 @@ static QueueMetrics forQueue(MetricsSystem ms, String queueName, ms.register( sourceName(queueName).toString(), "Metrics for queue: " + queueName, metrics); - metrics.initMetrics(); } queueMetrics.put(queueName, metrics); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueueMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueueMetrics.java index 857f025..6305a6c 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueueMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueueMetrics.java @@ -94,7 +94,6 @@ static FSQueueMetrics forQueue(String queueName, Queue parent, metrics = ms.register( sourceName(queueName).toString(), "Metrics for queue: " + queueName, metrics); - metrics.initMetrics(); } queueMetrics.put(queueName, metrics); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java index d1d1f35..ff7e7e4 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java @@ -279,6 +279,19 @@ public void testMetricsInitializedOnRMInit() { MetricsAsserts.assertGauge("ReservedContainers", 0, metrics); } + // This is to test metrics can consistently show up, even though they are not + // changed from last time they are collected. + @Test + public void testMetricsWithoutChangesShowup() { + String queueName = "single"; + QueueMetrics.forQueue(ms, queueName, null, false, conf); + MetricsSource queueSource = queueSource(ms, queueName); + checkApps(queueSource, 0, 0, 0, 0, 0, 0); + // after metrics have been collected, check one more time to verify we can + // still get the metrics. + checkApps(queueSource, 0, 0, 0, 0, 0, 0); + } + public static void checkApps(MetricsSource source, int submitted, int pending, int running, int completed, int failed, int killed) { MetricsRecordBuilder rb = getMetrics(source);