diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MetricsAsserts.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MetricsAsserts.java index d3848345e08..2e4238ea22e 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MetricsAsserts.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MetricsAsserts.java @@ -147,6 +147,8 @@ public static MetricsInfo anyInfo() { */ public static void assertGauge(String name, int expected, MetricsRecordBuilder rb) { + LOG.debug("Asserting int gauge " + name + " with expected value: " + + expected); Assert.assertEquals("Bad value for metric " + name, expected, getIntGauge(name, rb)); } @@ -166,6 +168,8 @@ public static int getIntGauge(String name, MetricsRecordBuilder rb) { */ public static void assertCounter(String name, int expected, MetricsRecordBuilder rb) { + LOG.debug("Asserting int counter " + name + " with expected value: " + + expected); Assert.assertEquals("Bad value for metric " + name, expected, getIntCounter(name, rb)); } @@ -186,6 +190,8 @@ public static int getIntCounter(String name, MetricsRecordBuilder rb) { */ public static void assertGauge(String name, long expected, MetricsRecordBuilder rb) { + LOG.debug("Asserting long gauge " + name + " with expected value: " + + expected); Assert.assertEquals("Bad value for metric " + name, expected, getLongGauge(name, rb)); } @@ -205,6 +211,7 @@ public static long getLongGauge(String name, MetricsRecordBuilder rb) { */ public static void assertGauge(String name, double expected, MetricsRecordBuilder rb) { + Assert.assertEquals("Bad value for metric " + name, expected, getDoubleGauge(name, rb), EPSILON); } @@ -224,6 +231,8 @@ public static double getDoubleGauge(String name, MetricsRecordBuilder rb) { */ public static void assertCounter(String name, long expected, MetricsRecordBuilder rb) { + LOG.debug("Asserting long counter " + name + " with expected value: " + + expected); Assert.assertEquals("Bad value for metric " + name, expected, getLongCounter(name, rb)); } @@ -284,6 +293,8 @@ private static void checkCaptured(ArgumentCaptor captor, String name) { */ public static void assertGauge(String name, int expected, MetricsSource source) { + LOG.debug("Asserting int gauge " + name + " with expected value: " + + expected); assertGauge(name, expected, getMetrics(source)); } @@ -295,6 +306,8 @@ public static void assertGauge(String name, int expected, */ public static void assertCounter(String name, int expected, MetricsSource source) { + LOG.debug("Asserting int counter " + name + " with expected value: " + + expected); assertCounter(name, expected, getMetrics(source)); } @@ -306,6 +319,8 @@ public static void assertCounter(String name, int expected, */ public static void assertGauge(String name, long expected, MetricsSource source) { + LOG.debug("Asserting long gauge " + name + " with expected value: " + + expected); assertGauge(name, expected, getMetrics(source)); } @@ -317,6 +332,8 @@ public static void assertGauge(String name, long expected, */ public static void assertCounter(String name, long expected, MetricsSource source) { + LOG.debug("Asserting long counter " + name + " with expected value: " + + expected); assertCounter(name, expected, getMetrics(source)); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppMetricsChecker.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppMetricsChecker.java new file mode 100644 index 00000000000..5c575c2354d --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppMetricsChecker.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.server.resourcemanager.scheduler; + +import com.google.common.collect.Maps; +import org.apache.hadoop.metrics2.MetricsRecordBuilder; +import org.apache.hadoop.metrics2.MetricsSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +import static org.apache.hadoop.test.MetricsAsserts.assertCounter; +import static org.apache.hadoop.test.MetricsAsserts.assertGauge; +import static org.apache.hadoop.test.MetricsAsserts.getMetrics; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_COMPLETED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_FAILED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_KILLED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_PENDING; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_RUNNING; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.AppMetricsChecker.AppMetricsKey.APPS_SUBMITTED; + +class AppMetricsChecker { + final static Logger LOG = LoggerFactory.getLogger(AppMetricsChecker.class); + + enum AppMetricsKey { + APPS_SUBMITTED("AppsSubmitted"), + APPS_PENDING("AppsPending"), + APPS_RUNNING("AppsRunning"), + APPS_COMPLETED("AppsCompleted"), + APPS_FAILED("AppsFailed"), + APPS_KILLED("AppsKilled"); + + private String value; + + AppMetricsKey(String value) { + this.value = value; + } + } + private MetricsRecordBuilder recordBuilder; + private MetricsSource source; + private final Map gaugesInt; + private final Map counters; + + private AppMetricsChecker(MetricsSource source, boolean all) { + this.gaugesInt = Maps.newHashMap(); + this.counters = Maps.newHashMap(); + if (source != null) { + this.recordBuilder = getMetrics(source, all); + this.source = source; + } + } + + private AppMetricsChecker(AppMetricsChecker checker, + MetricsSource source, boolean all) { + this.gaugesInt = Maps.newHashMap(checker.gaugesInt); + this.counters = Maps.newHashMap(checker.counters); + this.recordBuilder = getMetrics(source, all); + this.source = source; + } + + private static AppMetricsChecker createWithoutMetricsSource() { + return create(null, false); + } + + private static AppMetricsChecker create(MetricsSource source, boolean all) { + return new AppMetricsChecker(source, all); + } + + public static AppMetricsChecker createFromChecker(AppMetricsChecker checker, + MetricsSource source, boolean all) { + return new AppMetricsChecker(checker, source, all); + } + + public static AppMetricsChecker createInitial() { + return createWithoutMetricsSource() + .counter(APPS_SUBMITTED, 0) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 0) + .counter(APPS_COMPLETED, 0) + .counter(APPS_FAILED, 0) + .counter(APPS_KILLED, 0); + } + + AppMetricsChecker gaugeInt(AppMetricsKey key, int value) { + gaugesInt.put(key, value); + return this; + } + + AppMetricsChecker counter(AppMetricsKey key, int value) { + counters.put(key, value); + return this; + } + + AppMetricsChecker checkAll() { + logAssertingMessage(); + for (Map.Entry gauge : gaugesInt.entrySet()) { + assertGauge(gauge.getKey().value, gauge.getValue(), recordBuilder); + } + + for (Map.Entry counter : counters.entrySet()) { + assertCounter(counter.getKey().value, counter.getValue(), recordBuilder); + } + return this; + } + + private void logAssertingMessage() { + String queueName = ((QueueMetrics) source).queueName; + Map users = ((QueueMetrics) source).users; + + LOG.debug("Asserting App metrics.. QueueName: " + queueName + ", users: " + + (users != null && !users.isEmpty() ? users : "")); + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceMetricsChecker.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceMetricsChecker.java new file mode 100644 index 00000000000..dbef69d15aa --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ResourceMetricsChecker.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.server.resourcemanager.scheduler; + +import com.google.common.collect.Maps; +import org.apache.hadoop.metrics2.MetricsRecordBuilder; +import org.apache.hadoop.metrics2.MetricsSource; +import org.apache.hadoop.test.MetricsAsserts; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +import static org.apache.hadoop.test.MetricsAsserts.assertCounter; +import static org.apache.hadoop.test.MetricsAsserts.assertGauge; +import static org.apache.hadoop.test.MetricsAsserts.getMetrics; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.AGGREGATE_CONTAINERS_ALLOCATED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.AGGREGATE_CONTAINERS_RELEASED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.ALLOCATED_CONTAINERS; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.ALLOCATED_MB; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.ALLOCATED_V_CORES; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.AVAILABLE_MB; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.AVAILABLE_V_CORES; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.PENDING_CONTAINERS; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceMetricsChecker.ResourceMetricsKey.PENDING_MB; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceMetricsChecker.ResourceMetricsKey.PENDING_V_CORES; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.RESERVED_CONTAINERS; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .ResourceMetricsChecker.ResourceMetricsKey.RESERVED_MB; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceMetricsChecker.ResourceMetricsKey.RESERVED_V_CORES; + +class ResourceMetricsChecker { + final static Logger LOG = + LoggerFactory.getLogger(ResourceMetricsChecker.class); + + enum ResourceMetricsKey { + ALLOCATED_MB("AllocatedMB"), + ALLOCATED_V_CORES("AllocatedVCores"), + ALLOCATED_CONTAINERS("AllocatedContainers"), + AGGREGATE_CONTAINERS_ALLOCATED("AggregateContainersAllocated"), + AGGREGATE_CONTAINERS_RELEASED("AggregateContainersReleased"), + AVAILABLE_MB("AvailableMB"), + AVAILABLE_V_CORES("AvailableVCores"), + PENDING_MB("PendingMB"), + PENDING_V_CORES("PendingVCores"), + PENDING_CONTAINERS("PendingContainers"), + RESERVED_MB("ReservedMB"), + RESERVED_V_CORES("ReservedVCores"), + RESERVED_CONTAINERS("ReservedContainers"); + + private String value; + + ResourceMetricsKey(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + private MetricsRecordBuilder recordBuilder; + private final MetricsSource source; + final Map gaugesLong; + final Map gaugesInt; + final Map counters; + + private ResourceMetricsChecker(MetricsSource source) { + if (source != null) { + this.recordBuilder = getMetrics(source); + } + this.gaugesLong = Maps.newHashMap(); + this.gaugesInt = Maps.newHashMap(); + this.counters = Maps.newHashMap(); + this.source = source; + } + + private ResourceMetricsChecker(ResourceMetricsChecker checker, + MetricsSource source) { + this.gaugesLong = Maps.newHashMap(checker.gaugesLong); + this.gaugesInt = Maps.newHashMap(checker.gaugesInt); + this.counters = Maps.newHashMap(checker.counters); + this.recordBuilder = getMetrics(source); + this.source = source; + } + + private static ResourceMetricsChecker createWithoutMetricsSource() { + return create(null); + } + + private static ResourceMetricsChecker create(MetricsSource source) { + return new ResourceMetricsChecker(source); + } + + public static ResourceMetricsChecker createFromChecker( + ResourceMetricsChecker checker, MetricsSource source) { + return new ResourceMetricsChecker(checker, source); + } + + public static ResourceMetricsChecker createInitial() { + return createWithoutMetricsSource() + .gaugeLong(ALLOCATED_MB, 0) + .gaugeInt(ALLOCATED_V_CORES, 0) + .gaugeInt(ALLOCATED_CONTAINERS, 0) + .counter(AGGREGATE_CONTAINERS_ALLOCATED, 0) + .counter(AGGREGATE_CONTAINERS_RELEASED, 0) + .gaugeLong(AVAILABLE_MB, 0) + .gaugeInt(AVAILABLE_V_CORES, 0) + .gaugeLong(PENDING_MB, 0) + .gaugeInt(PENDING_V_CORES, 0) + .gaugeInt(PENDING_CONTAINERS, 0) + .gaugeLong(RESERVED_MB, 0) + .gaugeInt(RESERVED_V_CORES, 0) + .gaugeInt(RESERVED_CONTAINERS, 0); + } + + ResourceMetricsChecker gaugeLong(ResourceMetricsKey key, long value) { + gaugesLong.put(key, value); + return this; + } + + ResourceMetricsChecker gaugeInt(ResourceMetricsKey key, int value) { + gaugesInt.put(key, value); + return this; + } + + ResourceMetricsChecker counter(ResourceMetricsKey key, long value) { + counters.put(key, value); + return this; + } + + ResourceMetricsChecker checkAll() { + if (recordBuilder == null) { + throw new IllegalStateException( + "Cannot invoke checkAll when metrics source is not set!"); + } + logAssertingMessage(); + for (Map.Entry gauge : gaugesLong.entrySet()) { + assertGauge(gauge.getKey().value, gauge.getValue(), recordBuilder); + } + + for (Map.Entry gauge : gaugesInt.entrySet()) { + assertGauge(gauge.getKey().value, gauge.getValue(), recordBuilder); + } + + for (Map.Entry counter : counters.entrySet()) { + assertCounter(counter.getKey().value, counter.getValue(), recordBuilder); + } + return this; + } + + private void logAssertingMessage() { + String queueName = ((QueueMetrics) source).queueName; + Map users = ((QueueMetrics) source).users; + + LOG.debug("Asserting Resource metrics.. QueueName: " + queueName + + ", users: " + (users != null && !users.isEmpty() ? users : "")); + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java b/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 196d4c291cd..0385a02d11d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetrics.java @@ -19,8 +19,10 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler; import static org.apache.hadoop.test.MetricsAsserts.assertCounter; -import static org.apache.hadoop.test.MetricsAsserts.assertGauge; import static org.apache.hadoop.test.MetricsAsserts.getMetrics; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler + .AppMetricsChecker.AppMetricsKey.*; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceMetricsChecker.ResourceMetricsKey.*; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -45,9 +47,14 @@ import org.junit.Test; public class TestQueueMetrics { - static final int GB = 1024; // MB - private static final Configuration conf = new Configuration(); + private static final ResourceMetricsChecker INITIAL_RESOURCE_METRICS_CHECKER + = ResourceMetricsChecker.createInitial(); + private static final AppMetricsChecker INITIAL_APP_METRICS_CHECKER + = AppMetricsChecker.createInitial(); + + private static final int GB = 1024; // MB + private static final Configuration conf = new Configuration(); private MetricsSystem ms; @Before @@ -56,7 +63,8 @@ public void setUp() { QueueMetrics.clearQueueMetrics(); } - @Test public void testDefaultSingleQueueMetrics() { + @Test + public void testDefaultSingleQueueMetrics() { String queueName = "single"; String user = "alice"; @@ -67,9 +75,15 @@ public void setUp() { metrics.submitApp(user); MetricsSource userSource = userSource(ms, queueName, user); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + AppMetricsChecker appMetricsChecker = AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .counter(APPS_SUBMITTED, 1) + .checkAll(); metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); metrics.setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, Resources.createResource(100*GB, 100)); @@ -77,34 +91,66 @@ public void setUp() { user, 5, Resources.createResource(3*GB, 3)); // Available resources is set externally, as it depends on dynamic // configurable cluster/queue resources - checkResources(queueSource, 0, 0, 0, 0, 0, 100*GB, 100, 15*GB, 15, 5, 0, 0, 0); + ResourceMetricsChecker rmChecker = ResourceMetricsChecker + .createFromChecker(INITIAL_RESOURCE_METRICS_CHECKER, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100).gaugeLong(PENDING_MB, 15 * GB) + .gaugeInt(PENDING_V_CORES, 15).gaugeInt(PENDING_CONTAINERS, 5) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker. + createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); metrics.allocateResources(RMNodeLabelsManager.NO_LABEL, user, 3, Resources.createResource(2*GB, 2), true); - checkResources(queueSource, 6*GB, 6, 3, 3, 0, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); + rmChecker = ResourceMetricsChecker.createFromChecker(rmChecker, queueSource) + .gaugeLong(ALLOCATED_MB, 6 * GB) + .gaugeInt(ALLOCATED_V_CORES, 6) + .gaugeInt(ALLOCATED_CONTAINERS, 3) + .counter(AGGREGATE_CONTAINERS_ALLOCATED, 3) + .gaugeLong(PENDING_MB, 9 * GB) + .gaugeInt(PENDING_V_CORES, 9) + .gaugeInt(PENDING_CONTAINERS, 2) + .checkAll(); metrics.releaseResources(RMNodeLabelsManager.NO_LABEL, user, 1, Resources.createResource(2*GB, 2)); - checkResources(queueSource, 4*GB, 4, 2, 3, 1, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .gaugeLong(ALLOCATED_MB, 4 * GB) + .gaugeInt(ALLOCATED_V_CORES, 4) + .gaugeInt(ALLOCATED_CONTAINERS, 2) + .counter(AGGREGATE_CONTAINERS_RELEASED, 1) + .checkAll(); metrics.incrPendingResources(RMNodeLabelsManager.NO_LABEL, user, 0, Resources.createResource(2 * GB, 2)); - checkResources(queueSource, 4 * GB, 4, 2, 3, 1, 100 * GB, 100, 9 * GB, 9, 2, - 0, 0, 0); + //nothing should change in values + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .checkAll(); metrics.decrPendingResources(RMNodeLabelsManager.NO_LABEL, user, 0, Resources.createResource(2 * GB, 2)); - checkResources(queueSource, 4 * GB, 4, 2, 3, 1, 100 * GB, 100, 9 * GB, 9, 2, - 0, 0, 0); + //nothing should change in values + ResourceMetricsChecker.createFromChecker(rmChecker, queueSource) + .checkAll(); metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .counter(APPS_SUBMITTED, 1) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); metrics.finishApp(user, RMAppState.FINISHED); - checkApps(queueSource, 1, 0, 0, 1, 0, 0, true); + AppMetricsChecker.createFromChecker(appMetricsChecker, queueSource, true) + .counter(APPS_COMPLETED, 1) + .checkAll(); assertNull(userSource); } @@ -120,50 +166,86 @@ public void testQueueAppMetricsForMultipleFailures() { metrics.submitApp(user); MetricsSource userSource = userSource(ms, queueName, user); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + AppMetricsChecker appMetricsChecker = AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .counter(APPS_SUBMITTED, 1).checkAll(); metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); // As the application has failed, framework retries the same application // based on configuration metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); // Suppose say application has failed this time as well. metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); // As the application has failed, framework retries the same application // based on configuration metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); // Suppose say application has failed, and there's no more retries. metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); metrics.finishApp(user, RMAppState.FAILED); - checkApps(queueSource, 1, 0, 0, 0, 1, 0, true); + AppMetricsChecker.createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .counter(APPS_FAILED, 1) + .checkAll(); assertNull(userSource); } - @Test public void testSingleQueueWithUserMetrics() { + @Test + public void testSingleQueueWithUserMetrics() { String queueName = "single2"; String user = "dodo"; @@ -175,12 +257,22 @@ public void testQueueAppMetricsForMultipleFailures() { metrics.submitApp(user); MetricsSource userSource = userSource(ms, queueName, user); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(userSource, 1, 0, 0, 0, 0, 0, true); + AppMetricsChecker appMetricsChecker = AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .counter(APPS_SUBMITTED, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); - checkApps(userSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); metrics.setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, Resources.createResource(100*GB, 100)); @@ -190,34 +282,84 @@ public void testQueueAppMetricsForMultipleFailures() { user, 5, Resources.createResource(3*GB, 3)); // Available resources is set externally, as it depends on dynamic // configurable cluster/queue resources - checkResources(queueSource, 0, 0, 0, 0, 0, 100*GB, 100, 15*GB, 15, 5, 0, 0, 0); - checkResources(userSource, 0, 0, 0, 0, 0, 10*GB, 10, 15*GB, 15, 5, 0, 0, 0); + ResourceMetricsChecker rmChecker = ResourceMetricsChecker + .createFromChecker(INITIAL_RESOURCE_METRICS_CHECKER, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(PENDING_MB, 15 * GB) + .gaugeInt(PENDING_V_CORES, 15) + .gaugeInt(PENDING_CONTAINERS, 5) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); - checkApps(userSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); + AppMetricsChecker.createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); metrics.allocateResources(RMNodeLabelsManager.NO_LABEL, user, 3, Resources.createResource(2*GB, 2), true); - checkResources(queueSource, 6*GB, 6, 3, 3, 0, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); - checkResources(userSource, 6*GB, 6, 3, 3, 0, 10*GB, 10, 9*GB, 9, 2, 0, 0, 0); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(ALLOCATED_MB, 6 * GB) + .gaugeInt(ALLOCATED_V_CORES, 6) + .gaugeInt(ALLOCATED_CONTAINERS, 3) + .counter(AGGREGATE_CONTAINERS_ALLOCATED, 3) + .gaugeLong(PENDING_MB, 9 * GB) + .gaugeInt(PENDING_V_CORES, 9) + .gaugeInt(PENDING_CONTAINERS, 2) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); metrics.releaseResources(RMNodeLabelsManager.NO_LABEL, user, 1, Resources.createResource(2*GB, 2)); - checkResources(queueSource, 4*GB, 4, 2, 3, 1, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); - checkResources(userSource, 4*GB, 4, 2, 3, 1, 10*GB, 10, 9*GB, 9, 2, 0, 0, 0); + rmChecker = ResourceMetricsChecker.createFromChecker(rmChecker, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(ALLOCATED_MB, 4 * GB) + .gaugeInt(ALLOCATED_V_CORES, 4) + .gaugeInt(ALLOCATED_CONTAINERS, 2) + .counter(AGGREGATE_CONTAINERS_RELEASED, 1) + .checkAll(); + ResourceMetricsChecker.createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(userSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); metrics.finishApp(user, RMAppState.FINISHED); - checkApps(queueSource, 1, 0, 0, 1, 0, 0, true); - checkApps(userSource, 1, 0, 0, 1, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .counter(APPS_COMPLETED, 1) + .checkAll(); + AppMetricsChecker.createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); } - - @Test public void testNodeTypeMetrics() { + @Test + public void testNodeTypeMetrics() { String parentQueueName = "root"; String leafQueueName = "root.leaf"; String user = "alice"; @@ -259,11 +401,10 @@ public void testQueueAppMetricsForMultipleFailures() { checkAggregatedNodeTypes(parentQueueSource,1L,1L,2L); checkAggregatedNodeTypes(userSource,1L,1L,2L); checkAggregatedNodeTypes(parentUserSource,1L,1L,2L); - } - - @Test public void testTwoLevelWithUserMetrics() { + @Test + public void testTwoLevelWithUserMetrics() { String parentQueueName = "root"; String leafQueueName = "root.leaf"; String user = "alice"; @@ -282,16 +423,34 @@ public void testQueueAppMetricsForMultipleFailures() { MetricsSource userSource = userSource(ms, leafQueueName, user); MetricsSource parentUserSource = userSource(ms, parentQueueName, user); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(parentQueueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(userSource, 1, 0, 0, 0, 0, 0, true); - checkApps(parentUserSource, 1, 0, 0, 0, 0, 0, true); + AppMetricsChecker appMetricsChecker = AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .counter(APPS_SUBMITTED, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentQueueSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentUserSource, true) + .checkAll(); metrics.submitAppAttempt(user); - checkApps(queueSource, 1, 1, 0, 0, 0, 0, true); - checkApps(parentQueueSource, 1, 1, 0, 0, 0, 0, true); - checkApps(userSource, 1, 1, 0, 0, 0, 0, true); - checkApps(parentUserSource, 1, 1, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentQueueSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentUserSource, true) + .checkAll(); parentMetrics.setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, Resources.createResource(100*GB, 100)); @@ -303,14 +462,36 @@ public void testQueueAppMetricsForMultipleFailures() { user, Resources.createResource(10*GB, 10)); metrics.incrPendingResources(RMNodeLabelsManager.NO_LABEL, user, 5, Resources.createResource(3*GB, 3)); - checkResources(queueSource, 0, 0, 0, 0, 0, 100*GB, 100, 15*GB, 15, 5, 0, 0, 0); - checkResources(parentQueueSource, 0, 0, 0, 0, 0, 100*GB, 100, 15*GB, 15, 5, 0, 0, 0); - checkResources(userSource, 0, 0, 0, 0, 0, 10*GB, 10, 15*GB, 15, 5, 0, 0, 0); - checkResources(parentUserSource, 0, 0, 0, 0, 0, 10*GB, 10, 15*GB, 15, 5, 0, 0, 0); + + ResourceMetricsChecker rmChecker = ResourceMetricsChecker + .createFromChecker(INITIAL_RESOURCE_METRICS_CHECKER, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(PENDING_MB, 15 * GB) + .gaugeInt(PENDING_V_CORES, 15) + .gaugeInt(PENDING_CONTAINERS, 5) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, parentQueueSource) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, parentUserSource) + .checkAll(); metrics.runAppAttempt(app.getApplicationId(), user); - checkApps(queueSource, 1, 0, 1, 0, 0, 0, true); - checkApps(userSource, 1, 0, 1, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_PENDING, 0) + .gaugeInt(APPS_RUNNING, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); metrics.allocateResources(RMNodeLabelsManager.NO_LABEL, user, 3, Resources.createResource(2*GB, 2), true); @@ -318,32 +499,91 @@ public void testQueueAppMetricsForMultipleFailures() { user, Resources.createResource(3*GB, 3)); // Available resources is set externally, as it depends on dynamic // configurable cluster/queue resources - checkResources(queueSource, 6*GB, 6, 3, 3, 0, 100*GB, 100, 9*GB, 9, 2, 3*GB, 3, 1); - checkResources(parentQueueSource, 6*GB, 6, 3, 3, 0, 100*GB, 100, 9*GB, 9, 2, 3*GB, 3, 1); - checkResources(userSource, 6*GB, 6, 3, 3, 0, 10*GB, 10, 9*GB, 9, 2, 3*GB, 3, 1); - checkResources(parentUserSource, 6*GB, 6, 3, 3, 0, 10*GB, 10, 9*GB, 9, 2, 3*GB, 3, 1); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(ALLOCATED_MB, 6 * GB) + .gaugeInt(ALLOCATED_V_CORES, 6) + .gaugeInt(ALLOCATED_CONTAINERS, 3) + .counter(AGGREGATE_CONTAINERS_ALLOCATED, 3) + .gaugeLong(PENDING_MB, 9 * GB) + .gaugeInt(PENDING_V_CORES, 9) + .gaugeInt(PENDING_CONTAINERS, 2) + .gaugeLong(RESERVED_MB, 3 * GB) + .gaugeInt(RESERVED_V_CORES, 3) + .gaugeInt(RESERVED_CONTAINERS, 1) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, parentUserSource) + .checkAll(); metrics.releaseResources(RMNodeLabelsManager.NO_LABEL, user, 1, Resources.createResource(2*GB, 2)); metrics.unreserveResource(RMNodeLabelsManager.NO_LABEL, user, Resources.createResource(3*GB, 3)); - checkResources(queueSource, 4*GB, 4, 2, 3, 1, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); - checkResources(parentQueueSource, 4*GB, 4, 2, 3, 1, 100*GB, 100, 9*GB, 9, 2, 0, 0, 0); - checkResources(userSource, 4*GB, 4, 2, 3, 1, 10*GB, 10, 9*GB, 9, 2, 0, 0, 0); - checkResources(parentUserSource, 4*GB, 4, 2, 3, 1, 10*GB, 10, 9*GB, 9, 2, 0, 0, 0); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, queueSource) + .gaugeLong(AVAILABLE_MB, 100 * GB) + .gaugeInt(AVAILABLE_V_CORES, 100) + .gaugeLong(ALLOCATED_MB, 4 * GB) + .gaugeInt(ALLOCATED_V_CORES, 4) + .gaugeInt(ALLOCATED_CONTAINERS, 2) + .counter(AGGREGATE_CONTAINERS_RELEASED, 1) + .gaugeLong(RESERVED_MB, 0) + .gaugeInt(RESERVED_V_CORES, 0) + .gaugeInt(RESERVED_CONTAINERS, 0) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, parentQueueSource) + .checkAll(); + rmChecker = ResourceMetricsChecker + .createFromChecker(rmChecker, userSource) + .gaugeLong(AVAILABLE_MB, 10 * GB) + .gaugeInt(AVAILABLE_V_CORES, 10) + .checkAll(); + ResourceMetricsChecker + .createFromChecker(rmChecker, parentUserSource) + .checkAll(); metrics.finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); - checkApps(queueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(parentQueueSource, 1, 0, 0, 0, 0, 0, true); - checkApps(userSource, 1, 0, 0, 0, 0, 0, true); - checkApps(parentUserSource, 1, 0, 0, 0, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .gaugeInt(APPS_RUNNING, 0) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentQueueSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentUserSource, true) + .checkAll(); metrics.finishApp(user, RMAppState.FINISHED); - checkApps(queueSource, 1, 0, 0, 1, 0, 0, true); - checkApps(parentQueueSource, 1, 0, 0, 1, 0, 0, true); - checkApps(userSource, 1, 0, 0, 1, 0, 0, true); - checkApps(parentUserSource, 1, 0, 0, 1, 0, 0, true); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, queueSource, true) + .counter(APPS_COMPLETED, 1) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, parentQueueSource, true) + .checkAll(); + appMetricsChecker = AppMetricsChecker + .createFromChecker(appMetricsChecker, userSource, true) + .checkAll(); + AppMetricsChecker + .createFromChecker(appMetricsChecker, parentUserSource, true) + .checkAll(); } @Test @@ -383,8 +623,9 @@ public void testMetricsInitializedOnRMInit() { FifoScheduler.class, ResourceScheduler.class); MockRM rm = new MockRM(conf); QueueMetrics metrics = rm.getResourceScheduler().getRootQueueMetrics(); - checkApps(metrics, 0, 0, 0, 0, 0, 0, true); - MetricsAsserts.assertGauge("ReservedContainers", 0, metrics); + AppMetricsChecker.createFromChecker(INITIAL_APP_METRICS_CHECKER, metrics, true) + .checkAll(); + MetricsAsserts.assertGauge(RESERVED_CONTAINERS.getValue(), 0, metrics); } // This is to test all metrics can consistently show up if specified true to @@ -396,52 +637,26 @@ public void testCollectAllMetrics() { QueueMetrics.forQueue(ms, queueName, null, false, conf); MetricsSource queueSource = queueSource(ms, queueName); - checkApps(queueSource, 0, 0, 0, 0, 0, 0, true); + AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .checkAll(); try { // do not collect all metrics - checkApps(queueSource, 0, 0, 0, 0, 0, 0, false); + AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, false) + .checkAll(); Assert.fail(); } catch (AssertionError e) { - Assert.assertTrue(e.getMessage().contains( - "Expected exactly one metric for name ")); + Assert.assertTrue( + e.getMessage().contains("Expected exactly one metric for name ")); } // collect all metrics - checkApps(queueSource, 0, 0, 0, 0, 0, 0, true); - } - - public static void checkApps(MetricsSource source, int submitted, int pending, - int running, int completed, int failed, int killed, boolean all) { - MetricsRecordBuilder rb = getMetrics(source, all); - assertCounter("AppsSubmitted", submitted, rb); - assertGauge("AppsPending", pending, rb); - assertGauge("AppsRunning", running, rb); - assertCounter("AppsCompleted", completed, rb); - assertCounter("AppsFailed", failed, rb); - assertCounter("AppsKilled", killed, rb); - } - - public static void checkResources(MetricsSource source, long allocatedMB, - int allocatedCores, int allocCtnrs, long aggreAllocCtnrs, - long aggreReleasedCtnrs, long availableMB, int availableCores, long pendingMB, - int pendingCores, int pendingCtnrs, long reservedMB, int reservedCores, - int reservedCtnrs) { - MetricsRecordBuilder rb = getMetrics(source); - assertGauge("AllocatedMB", allocatedMB, rb); - assertGauge("AllocatedVCores", allocatedCores, rb); - assertGauge("AllocatedContainers", allocCtnrs, rb); - assertCounter("AggregateContainersAllocated", aggreAllocCtnrs, rb); - assertCounter("AggregateContainersReleased", aggreReleasedCtnrs, rb); - assertGauge("AvailableMB", availableMB, rb); - assertGauge("AvailableVCores", availableCores, rb); - assertGauge("PendingMB", pendingMB, rb); - assertGauge("PendingVCores", pendingCores, rb); - assertGauge("PendingContainers", pendingCtnrs, rb); - assertGauge("ReservedMB", reservedMB, rb); - assertGauge("ReservedVCores", reservedCores, rb); - assertGauge("ReservedContainers", reservedCtnrs, rb); + AppMetricsChecker + .createFromChecker(INITIAL_APP_METRICS_CHECKER, queueSource, true) + .checkAll(); } - public static void checkAggregatedNodeTypes(MetricsSource source, + private static void checkAggregatedNodeTypes(MetricsSource source, long nodeLocal, long rackLocal, long offSwitch) { MetricsRecordBuilder rb = getMetrics(source); assertCounter("AggregateNodeLocalContainersAllocated", nodeLocal, rb); @@ -459,14 +674,12 @@ private static AppSchedulingInfo mockApp(String user) { } public static MetricsSource queueSource(MetricsSystem ms, String queue) { - MetricsSource s = ms.getSource(QueueMetrics.sourceName(queue).toString()); - return s; + return ms.getSource(QueueMetrics.sourceName(queue).toString()); } - public static MetricsSource userSource(MetricsSystem ms, String queue, - String user) { - MetricsSource s = ms.getSource(QueueMetrics.sourceName(queue). + private static MetricsSource userSource(MetricsSystem ms, String queue, + String user) { + return ms.getSource(QueueMetrics.sourceName(queue). append(",user=").append(user).toString()); - return s; } }