diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java b/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 0a0e9d627e7..11ceaa48aba 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java @@ -49,7 +49,6 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState; import org.apache.hadoop.yarn.server.resourcemanager.scheduler .QueueMetricsForCustomResources.MetricsForCustomResource; -import org.apache.hadoop.yarn.server.utils.BuilderUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -579,8 +578,7 @@ public void updatePreemptedSecondsForCustomResources(Resource res, queueMetricsForCustomResources .increaseWithMultiplier(AGGREGATE_PREEMPTED_SECONDS, res, seconds); if (parent != null) { - parent.queueMetricsForCustomResources.increaseWithMultiplier( - AGGREGATE_PREEMPTED_SECONDS, res, seconds); + parent.updatePreemptedSecondsForCustomResources(res, seconds); } } @@ -687,7 +685,7 @@ public Resource getAllocatedResources() { return Resource.newInstance(allocatedMB.value(), allocatedVCores.value(), queueMetricsForCustomResources.getAllocatedCustomResources()); } - return BuilderUtils.newResource(allocatedMB.value(), + return Resource.newInstance(allocatedMB.value(), allocatedVCores.value()); } 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/QueueHierarchy.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueHierarchy.java new file mode 100644 index 00000000000..f7ae4b13163 --- /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/QueueHierarchy.java @@ -0,0 +1,69 @@ +/* + * 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.Lists; +import java.util.List; + +public class QueueHierarchy { + private List queues; + + private QueueHierarchy(List queues) { + this.queues = queues; + } + + String queueAtLevel(int level) { + if (level < 0 || level > queues.size() - 1) { + throw new IllegalArgumentException(String.format( + "Level should be between 0 and %d as number of queues" + + "in this hierarchy is: %d", queues.size() - 1, queues.size())); + } + return queues.get(level); + } + + int size() { + return queues.size(); + } + + public static QueueHierarchy create(List queues) { + validateQueues(queues); + return new QueueHierarchy(queues); + } + + public static QueueHierarchy create(String root, String leaf) { + return create(Lists.newArrayList(root, leaf)); + } + + private static void validateQueues(List queues) { + if (queues.size() < 2) { + throw new IllegalArgumentException( + "Should specify parent and leaf queue at least!"); + } + for (int i = 0; i < queues.size(); i++) { + String queue = queues.get(i); + if (i > 0) { + String parentQueue = queues.get(i - 1); + if (!queue.startsWith(parentQueue + ".")) { + throw new IllegalArgumentException(String.format( + "The name of child queue should start with its" + + "parent queue name! Parent: %s, Child: %s", + parentQueue, queue)); + } + } + } + } +} 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/QueueMetricsTestcase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsTestcase.java index 447244bb87b..e96f4d6437d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsTestcase.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsTestcase.java @@ -17,27 +17,35 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.resourcetypes.ResourceTypesTestHelper; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler - .QueueMetricsForCustomResources.MetricsForCustomResource; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler - .TestQueueMetrics.MultiQueueSetup; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueMetricsForCustomResources.MetricsForCustomResource; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.TestQueueMetrics.MultiQueueSetup; +import java.util.List; import java.util.Map; import java.util.function.Function; -import static org.apache.hadoop.yarn.server.resourcemanager.scheduler - .ResourceMetricsChecker.ResourceMetricsKey.*; -import static org.apache.hadoop.yarn.server.resourcemanager.scheduler - .TestQueueMetricsForCustomResources.assertCustomResourceValue; -import static org.apache.hadoop.yarn.server.resourcemanager.scheduler - .TestQueueMetricsForCustomResources.assertCustomResourceValueInternal; +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.AGGREGATE_MEMORY_MB_SECONDS_PREEMPTED; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceMetricsChecker.ResourceMetricsKey.AGGREGATE_VCORE_SECONDS_PREEMPTED; +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.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; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.TestQueueMetricsForCustomResources.assertCustomResourceValue; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.TestQueueMetricsForCustomResources.assertCustomResourceValueInternal; public class QueueMetricsTestcase { - private enum MetricsAssertType { ALL, PARENT_QUEUE_ONLY } @@ -50,8 +58,8 @@ private int vCores; private int vCoresToDecrease; private long customResToDecrease; - private String parentQueueName; - private String leafQueueName; + private List queues = Lists.newArrayList(); + private QueueHierarchy queueHierarchy; private String user; private String partition; private long memoryMB; @@ -105,12 +113,21 @@ public Builder withCustomResToDecrease(long customResToDecrease) { } public Builder withParentQueueName(String parentQueueName) { - this.parentQueueName = parentQueueName; + this.queues.add(0, parentQueueName); return this; } public Builder withLeafQueueName(String leafQueueName) { - this.leafQueueName = leafQueueName; + this.queues.add(1, leafQueueName); + return this; + } + + public Builder withQueueHierarchy(String... queues) { + if (!this.queues.isEmpty()) { + throw new IllegalStateException("Either of parent/leaf queues or " + + "queue hierarchy should be specified!"); + } + this.queues = Lists.newArrayList(queues); return this; } @@ -124,24 +141,21 @@ public Builder withPartition(String partition) { return this; } - public QueueMetricsTestcase build() { - return new QueueMetricsTestcase(ms, leafQueueName, parentQueueName, user, - partition, customResourceValues, containers, containersToDecrease, - vCores, vCoresToDecrease, memoryMB, memoryMBToDecrease, - customResToDecrease); - } - public Builder withMetricSystem(MetricsSystem ms) { this.ms = ms; return this; } + + public QueueMetricsTestcase build() { + this.queueHierarchy = QueueHierarchy.create(Lists.newArrayList(queues)); + return new QueueMetricsTestcase(this); + } } private static final String CUSTOM_RES_1 = "custom_res_1"; private static final String CUSTOM_RES_2 = "custom_res_2"; private final MetricsSystem ms; - private final String leafQueueName; - private final String parentQueueName; + private final QueueHierarchy queueHierarchy; private final Map customResourceValues; private final int containers; private final int containersToDecrease; @@ -153,25 +167,19 @@ public Builder withMetricSystem(MetricsSystem ms) { private final String user; private final String partition; - - private QueueMetricsTestcase(MetricsSystem ms, String leafQueueName, String - parentQueueName, String user, String partition, Map - customResourceValues, int containers, int containersToDecrease, int - vCores, int vCoresToDecrease, long memoryMB, long memoryMBToDecrease, - long customResToDecrease) { - this.ms = ms; - this.leafQueueName = leafQueueName; - this.parentQueueName = parentQueueName; - this.customResourceValues = customResourceValues; - this.containers = containers; - this.containersToDecrease = containersToDecrease; - this.vCores = vCores; - this.vCoresToDecrease = vCoresToDecrease; - this.memoryMB = memoryMB; - this.memoryMBToDecrease = memoryMBToDecrease; - this.customResToDecrease = customResToDecrease; - this.user = user; - this.partition = partition; + private QueueMetricsTestcase(Builder builder) { + this.ms = builder.ms; + this.queueHierarchy = builder.queueHierarchy; + this.customResourceValues = builder.customResourceValues; + this.containers = builder.containers; + this.containersToDecrease = builder.containersToDecrease; + this.vCores = builder.vCores; + this.vCoresToDecrease = builder.vCoresToDecrease; + this.memoryMB = builder.memoryMB; + this.memoryMBToDecrease = builder.memoryMBToDecrease; + this.customResToDecrease = builder.customResToDecrease; + this.user = builder.user; + this.partition = builder.partition; } void testIncreasePendingResources() { @@ -190,9 +198,8 @@ private void testIncreasePendingResourcesInternal(boolean useContainers) { containers = 1; } - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.incrPendingResources(partition, mqs.user, containers, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().incrPendingResources(partition, mqs.user, containers, createResource()); ResourceMetricsChecker checker = ResourceMetricsChecker @@ -200,7 +207,7 @@ private void testIncreasePendingResourcesInternal(boolean useContainers) { .gaugeInt(PENDING_CONTAINERS, containers) .gaugeLong(PENDING_MB, containers * memoryMB) .gaugeInt(PENDING_V_CORES, containers * vCores) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.PENDING, getModifiedCustomResourceValues(v -> v * containers)); } @@ -212,9 +219,8 @@ public void testDecreasePendingResources() { final long memoryAfterDecrease = (memoryMB * containers) - (memoryMBToDecrease * containersToDecrease); - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.decrPendingResources(partition, user, containersToDecrease, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().decrPendingResources(partition, user, containersToDecrease, ResourceTypesTestHelper.newResource(memoryMBToDecrease, vCoresToDecrease, ImmutableMap. builder() .put(CUSTOM_RES_1, String.valueOf(customResToDecrease)) @@ -226,7 +232,7 @@ public void testDecreasePendingResources() { .gaugeInt(PENDING_CONTAINERS, containersAfterDecrease) .gaugeLong(PENDING_MB, memoryAfterDecrease) .gaugeInt(PENDING_V_CORES, vcoresAfterDecrease) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.PENDING, getModifiedCustomResourceValues(v -> v * containers @@ -234,9 +240,8 @@ public void testDecreasePendingResources() { } public void testAllocateResources(boolean decreasePending) { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.allocateResources(partition, mqs.user, containers, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().allocateResources(partition, mqs.user, containers, createResource(), decreasePending); ResourceMetricsChecker checker = ResourceMetricsChecker @@ -248,7 +253,7 @@ public void testAllocateResources(boolean decreasePending) { .gaugeInt(PENDING_CONTAINERS, 0) .gaugeLong(PENDING_MB, 0) .gaugeInt(PENDING_V_CORES, 0) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); if (decreasePending) { assertMetrics(mqs, checker, MetricsForCustomResource.PENDING, getModifiedCustomResourceValues(v -> 0L)); @@ -260,9 +265,8 @@ public void testAllocateResources(boolean decreasePending) { } public void testAllocateResourcesWithoutContainer() { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.allocateResources(partition, mqs.user, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().allocateResources(partition, mqs.user, createResource()); ResourceMetricsChecker checker = ResourceMetricsChecker @@ -272,7 +276,7 @@ public void testAllocateResourcesWithoutContainer() { .gaugeInt(PENDING_CONTAINERS, 1) .gaugeLong(PENDING_MB, 0) .gaugeInt(PENDING_V_CORES, 0) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.PENDING, getModifiedCustomResourceValues(v -> 0L)); assertMetrics(mqs, checker, MetricsForCustomResource.ALLOCATED, @@ -280,57 +284,53 @@ public void testAllocateResourcesWithoutContainer() { } public void testReleaseResourcesWithContainers() { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.releaseResources(partition, mqs.user, containers, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().releaseResources(partition, mqs.user, containers, createResource()); ResourceMetricsChecker checker = ResourceMetricsChecker .create() .counter(AGGREGATE_CONTAINERS_ALLOCATED, containers) .counter(AGGREGATE_CONTAINERS_RELEASED, containers) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.ALLOCATED, getModifiedCustomResourceValues(v -> 0L)); } public void testUpdatePreemptedSeconds(int seconds) { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.updatePreemptedMemoryMBSeconds(memoryMB * seconds); - mqs.leafMetrics.updatePreemptedVcoreSeconds(vCores * seconds); - mqs.leafMetrics.updatePreemptedSecondsForCustomResources( + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().updatePreemptedMemoryMBSeconds(memoryMB * seconds); + mqs.getLeafMetrics().updatePreemptedVcoreSeconds(vCores * seconds); + mqs.getLeafMetrics().updatePreemptedSecondsForCustomResources( createResource(), seconds); ResourceMetricsChecker checker = ResourceMetricsChecker .create() .counter(AGGREGATE_MEMORY_MB_SECONDS_PREEMPTED, memoryMB * seconds) .counter(AGGREGATE_VCORE_SECONDS_PREEMPTED, vCores * seconds) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetricsParentQueueOnly(mqs, checker, MetricsForCustomResource.AGGREGATE_PREEMPTED_SECONDS, getModifiedCustomResourceValues(v -> v * seconds)); } public void testReserveResources() { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.reserveResource(partition, mqs.user, createResource()); + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().reserveResource(partition, mqs.user, createResource()); ResourceMetricsChecker checker = ResourceMetricsChecker .create() .gaugeInt(RESERVED_CONTAINERS, 1) .gaugeLong(RESERVED_MB, memoryMB) .gaugeInt(RESERVED_V_CORES, vCores) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.RESERVED, getModifiedCustomResourceValues(v -> v)); } public void testUnreserveResources() { - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - mqs.leafMetrics.unreserveResource(partition, mqs.user, + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + mqs.getLeafMetrics().unreserveResource(partition, mqs.user, createResource()); ResourceMetricsChecker checker = ResourceMetricsChecker @@ -338,16 +338,15 @@ public void testUnreserveResources() { .gaugeInt(RESERVED_CONTAINERS, 0) .gaugeLong(RESERVED_MB, 0) .gaugeInt(RESERVED_V_CORES, 0) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); assertMetrics(mqs, checker, MetricsForCustomResource.RESERVED, getModifiedCustomResourceValues(v -> 0L)); } public void testGetAllocatedResources() { testAllocateResources(false); - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); - Resource res = mqs.leafMetrics.getAllocatedResources(); + MultiQueueSetup mqs = new MultiQueueSetup(ms, queueHierarchy, user); + Resource res = mqs.getLeafMetrics().getAllocatedResources(); if (customResourceValues.size() > 0) { assertCustomResourceValueInternal(MetricsForCustomResource.ALLOCATED, CUSTOM_RES_1, customResourceValues.get(CUSTOM_RES_1) * containers, @@ -379,22 +378,22 @@ private void assertMetricsInternal(MultiQueueSetup mqs, MetricsAssertType metricsAssertType, Map expectedCustomResourceValues) { checker = ResourceMetricsChecker.createFromChecker(checker) - .checkAgainst(mqs.parentQueueSource); + .checkAgainst(mqs.getRootQueueSource()); if (metricsAssertType == MetricsAssertType.ALL) { checker = ResourceMetricsChecker.createFromChecker(checker) - .checkAgainst(mqs.userSource); + .checkAgainst(mqs.getLeafUserSource()); ResourceMetricsChecker.createFromChecker(checker) - .checkAgainst(mqs.parentUserSource); + .checkAgainst(mqs.getRootUserSource()); } - assertCustomResourceValue(mqs.parentMetrics, metricsType, CUSTOM_RES_1, + assertCustomResourceValue(mqs.getRootMetrics(), metricsType, CUSTOM_RES_1, expectedCustomResourceValues.get(CUSTOM_RES_1)); - assertCustomResourceValue(mqs.parentMetrics, metricsType, CUSTOM_RES_2, + assertCustomResourceValue(mqs.getRootMetrics(), metricsType, CUSTOM_RES_2, expectedCustomResourceValues.get(CUSTOM_RES_2)); - assertCustomResourceValue(mqs.leafMetrics, metricsType, CUSTOM_RES_1, + assertCustomResourceValue(mqs.getLeafMetrics(), metricsType, CUSTOM_RES_1, expectedCustomResourceValues.get(CUSTOM_RES_1)); - assertCustomResourceValue(mqs.leafMetrics, metricsType, CUSTOM_RES_2, + assertCustomResourceValue(mqs.getLeafMetrics(), metricsType, CUSTOM_RES_2, expectedCustomResourceValues.get(CUSTOM_RES_2)); } 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 626b4c0f81f..3cce5ec6b76 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 @@ -27,6 +27,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import com.google.common.collect.Lists; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.metrics2.MetricsRecordBuilder; import org.apache.hadoop.metrics2.MetricsSource; @@ -46,37 +47,74 @@ import org.junit.Before; import org.junit.Test; +import java.util.List; + public class TestQueueMetrics { static class MultiQueueSetup { - final MetricsSource parentQueueSource; - final MetricsSource leafQueueSource; - final MetricsSource userSource; - final MetricsSource parentUserSource; - final QueueMetrics parentMetrics; - final QueueMetrics leafMetrics; - final String parentQueueName; - final String leafQueueName; + private List queueMetrics = Lists.newArrayList(); + private List queueSources = Lists.newArrayList(); + private List userSources = Lists.newArrayList(); + final String user; - MultiQueueSetup(MetricsSystem ms, String parentQueueName, - String leafQueueName, String user) { - this.parentQueueName = parentQueueName; - this.leafQueueName = leafQueueName; + MultiQueueSetup(MetricsSystem ms, QueueHierarchy queueHierarchy, + String user) { this.user = user; - - parentMetrics = - QueueMetrics.forQueue(ms, parentQueueName, null, true, conf); - Queue parentQueue = mock(Queue.class); - when(parentQueue.getMetrics()).thenReturn(parentMetrics); - leafMetrics = - QueueMetrics.forQueue(ms, leafQueueName, parentQueue, true, conf); - parentQueueSource = queueSource(ms, parentQueueName); - leafQueueSource = queueSource(ms, leafQueueName); - - leafMetrics.submitApp(user); - userSource = userSource(ms, leafQueueName, user); - parentUserSource = userSource(ms, parentQueueName, user); + init(ms, queueHierarchy); + + getLeafMetrics().submitApp(user); + + for (int i = 0; i < queueHierarchy.size(); i++) { + String queue = queueHierarchy.queueAtLevel(i); + userSources.add(userSource(ms, queue, user)); + } + + } + + private void init(MetricsSystem ms, QueueHierarchy queueHierarchy) { + for (int i = 0; i < queueHierarchy.size(); i++) { + final String queueName = queueHierarchy.queueAtLevel(i); + //root queue + if (i == 0) { + queueMetrics.add(QueueMetrics.forQueue(ms, queueName, null, + true, conf)); + } else { + Queue parentQueue = createMockQueue(queueMetrics.get(i - 1)); + queueMetrics.add( + QueueMetrics.forQueue(ms, queueName, parentQueue, true, conf)); + } + queueSources.add(queueSource(ms, queueName)); + } + } + + QueueMetrics getRootMetrics() { + return queueMetrics.get(0); + } + + QueueMetrics getLeafMetrics() { + return queueMetrics.get(queueMetrics.size() - 1); } + + MetricsSource getRootQueueSource() { + return queueSources.get(0); + } + + MetricsSource getLeafQueueSource() { + return queueSources.get(queueSources.size() - 1); + } + + MetricsSource getRootUserSource() { + return userSources.get(0); + } + + MetricsSource getLeafUserSource() { + return userSources.get(userSources.size() - 1); + } + } + private static Queue createMockQueue(QueueMetrics metrics) { + Queue queue = mock(Queue.class); + when(queue.getMetrics()).thenReturn(metrics); + return queue; } private static final int GB = 1024; // MB @@ -428,56 +466,54 @@ public void testNodeTypeMetrics() { @Test public void testTwoLevelWithUserMetrics() { - String parentQueueName = "root"; - String leafQueueName = "root.leaf"; String user = "alice"; AppSchedulingInfo app = mockApp(user); - MultiQueueSetup mqs = new MultiQueueSetup(ms, - parentQueueName, leafQueueName, user); + MultiQueueSetup mqs = new MultiQueueSetup(ms, + QueueHierarchy.create("root", "root.leaf"), user); AppMetricsChecker appMetricsQueueSourceChecker = AppMetricsChecker.create() .counter(APPS_SUBMITTED, 1) - .checkAgainst(mqs.leafQueueSource, true); + .checkAgainst(mqs.getLeafQueueSource(), true); AppMetricsChecker appMetricsParentQueueSourceChecker = AppMetricsChecker.create() .counter(APPS_SUBMITTED, 1) - .checkAgainst(mqs.parentQueueSource, true); + .checkAgainst(mqs.getRootQueueSource(), true); AppMetricsChecker appMetricsUserSourceChecker = AppMetricsChecker.create() .counter(APPS_SUBMITTED, 1) - .checkAgainst(mqs.userSource, true); + .checkAgainst(mqs.getLeafUserSource(), true); AppMetricsChecker appMetricsParentUserSourceChecker = AppMetricsChecker.create() .counter(APPS_SUBMITTED, 1) - .checkAgainst(mqs.parentUserSource, true); + .checkAgainst(mqs.getRootUserSource(), true); - mqs.leafMetrics.submitAppAttempt(user); + mqs.getLeafMetrics().submitAppAttempt(user); appMetricsQueueSourceChecker = AppMetricsChecker.createFromChecker(appMetricsQueueSourceChecker) .gaugeInt(APPS_PENDING, 1) - .checkAgainst(mqs.leafQueueSource, true); + .checkAgainst(mqs.getLeafQueueSource(), true); appMetricsParentQueueSourceChecker = AppMetricsChecker.createFromChecker(appMetricsParentQueueSourceChecker) .gaugeInt(APPS_PENDING, 1) - .checkAgainst(mqs.parentQueueSource, true); + .checkAgainst(mqs.getRootQueueSource(), true); appMetricsUserSourceChecker = AppMetricsChecker.createFromChecker(appMetricsUserSourceChecker) .gaugeInt(APPS_PENDING, 1) - .checkAgainst(mqs.userSource, true); + .checkAgainst(mqs.getLeafUserSource(), true); appMetricsParentUserSourceChecker = AppMetricsChecker.createFromChecker(appMetricsParentUserSourceChecker) .gaugeInt(APPS_PENDING, 1) - .checkAgainst(mqs.parentUserSource, true); + .checkAgainst(mqs.getRootUserSource(), true); - mqs.parentMetrics.setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, + mqs.getRootMetrics().setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, Resources.createResource(100*GB, 100)); - mqs.leafMetrics.setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().setAvailableResourcesToQueue(RMNodeLabelsManager.NO_LABEL, Resources.createResource(100*GB, 100)); - mqs.parentMetrics.setAvailableResourcesToUser(RMNodeLabelsManager.NO_LABEL, + mqs.getRootMetrics().setAvailableResourcesToUser(RMNodeLabelsManager.NO_LABEL, user, Resources.createResource(10*GB, 10)); - mqs.leafMetrics.setAvailableResourcesToUser(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().setAvailableResourcesToUser(RMNodeLabelsManager.NO_LABEL, user, Resources.createResource(10*GB, 10)); - mqs.leafMetrics.incrPendingResources(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().incrPendingResources(RMNodeLabelsManager.NO_LABEL, user, 5, Resources.createResource(3*GB, 3)); ResourceMetricsChecker resMetricsQueueSourceChecker = @@ -487,7 +523,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(PENDING_MB, 15 * GB) .gaugeInt(PENDING_V_CORES, 15) .gaugeInt(PENDING_CONTAINERS, 5) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); ResourceMetricsChecker resMetricsParentQueueSourceChecker = ResourceMetricsChecker.create() .gaugeLong(AVAILABLE_MB, 100 * GB) @@ -495,7 +531,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(PENDING_MB, 15 * GB) .gaugeInt(PENDING_V_CORES, 15) .gaugeInt(PENDING_CONTAINERS, 5) - .checkAgainst(mqs.parentQueueSource); + .checkAgainst(mqs.getRootQueueSource()); ResourceMetricsChecker resMetricsUserSourceChecker = ResourceMetricsChecker.create() .gaugeLong(AVAILABLE_MB, 10 * GB) @@ -503,7 +539,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(PENDING_MB, 15 * GB) .gaugeInt(PENDING_V_CORES, 15) .gaugeInt(PENDING_CONTAINERS, 5) - .checkAgainst(mqs.userSource); + .checkAgainst(mqs.getLeafUserSource()); ResourceMetricsChecker resMetricsParentUserSourceChecker = ResourceMetricsChecker.create() .gaugeLong(AVAILABLE_MB, 10 * GB) @@ -511,23 +547,23 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(PENDING_MB, 15 * GB) .gaugeInt(PENDING_V_CORES, 15) .gaugeInt(PENDING_CONTAINERS, 5) - .checkAgainst(mqs.parentUserSource); + .checkAgainst(mqs.getRootUserSource()); - mqs.leafMetrics.runAppAttempt(app.getApplicationId(), user); + mqs.getLeafMetrics().runAppAttempt(app.getApplicationId(), user); appMetricsQueueSourceChecker = AppMetricsChecker.createFromChecker(appMetricsQueueSourceChecker) .gaugeInt(APPS_PENDING, 0) .gaugeInt(APPS_RUNNING, 1) - .checkAgainst(mqs.leafQueueSource, true); + .checkAgainst(mqs.getLeafQueueSource(), true); appMetricsUserSourceChecker = AppMetricsChecker.createFromChecker(appMetricsUserSourceChecker) .gaugeInt(APPS_PENDING, 0) .gaugeInt(APPS_RUNNING, 1) - .checkAgainst(mqs.userSource, true); + .checkAgainst(mqs.getLeafUserSource(), true); - mqs.leafMetrics.allocateResources(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().allocateResources(RMNodeLabelsManager.NO_LABEL, user, 3, Resources.createResource(2*GB, 2), true); - mqs.leafMetrics.reserveResource(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().reserveResource(RMNodeLabelsManager.NO_LABEL, user, Resources.createResource(3*GB, 3)); // Available resources is set externally, as it depends on dynamic // configurable cluster/queue resources @@ -543,7 +579,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 3 * GB) .gaugeInt(RESERVED_V_CORES, 3) .gaugeInt(RESERVED_CONTAINERS, 1) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); resMetricsParentQueueSourceChecker = ResourceMetricsChecker .createFromChecker(resMetricsParentQueueSourceChecker) @@ -557,7 +593,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 3 * GB) .gaugeInt(RESERVED_V_CORES, 3) .gaugeInt(RESERVED_CONTAINERS, 1) - .checkAgainst(mqs.parentQueueSource); + .checkAgainst(mqs.getRootQueueSource()); resMetricsUserSourceChecker = ResourceMetricsChecker.createFromChecker(resMetricsUserSourceChecker) .gaugeLong(ALLOCATED_MB, 6 * GB) @@ -570,7 +606,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 3 * GB) .gaugeInt(RESERVED_V_CORES, 3) .gaugeInt(RESERVED_CONTAINERS, 1) - .checkAgainst(mqs.userSource); + .checkAgainst(mqs.getLeafUserSource()); resMetricsParentUserSourceChecker = ResourceMetricsChecker .createFromChecker(resMetricsParentUserSourceChecker) .gaugeLong(ALLOCATED_MB, 6 * GB) @@ -583,11 +619,11 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 3 * GB) .gaugeInt(RESERVED_V_CORES, 3) .gaugeInt(RESERVED_CONTAINERS, 1) - .checkAgainst(mqs.parentUserSource); + .checkAgainst(mqs.getRootUserSource()); - mqs.leafMetrics.releaseResources(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().releaseResources(RMNodeLabelsManager.NO_LABEL, user, 1, Resources.createResource(2*GB, 2)); - mqs.leafMetrics.unreserveResource(RMNodeLabelsManager.NO_LABEL, + mqs.getLeafMetrics().unreserveResource(RMNodeLabelsManager.NO_LABEL, user, Resources.createResource(3*GB, 3)); ResourceMetricsChecker.createFromChecker(resMetricsQueueSourceChecker) .gaugeLong(ALLOCATED_MB, 4 * GB) @@ -597,7 +633,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 0) .gaugeInt(RESERVED_V_CORES, 0) .gaugeInt(RESERVED_CONTAINERS, 0) - .checkAgainst(mqs.leafQueueSource); + .checkAgainst(mqs.getLeafQueueSource()); ResourceMetricsChecker.createFromChecker(resMetricsParentQueueSourceChecker) .gaugeLong(ALLOCATED_MB, 4 * GB) .gaugeInt(ALLOCATED_V_CORES, 4) @@ -606,7 +642,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 0) .gaugeInt(RESERVED_V_CORES, 0) .gaugeInt(RESERVED_CONTAINERS, 0) - .checkAgainst(mqs.parentQueueSource); + .checkAgainst(mqs.getRootQueueSource()); ResourceMetricsChecker.createFromChecker(resMetricsUserSourceChecker) .gaugeLong(ALLOCATED_MB, 4 * GB) .gaugeInt(ALLOCATED_V_CORES, 4) @@ -615,7 +651,7 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 0) .gaugeInt(RESERVED_V_CORES, 0) .gaugeInt(RESERVED_CONTAINERS, 0) - .checkAgainst(mqs.userSource); + .checkAgainst(mqs.getLeafUserSource()); ResourceMetricsChecker.createFromChecker(resMetricsParentUserSourceChecker) .gaugeLong(ALLOCATED_MB, 4 * GB) .gaugeInt(ALLOCATED_V_CORES, 4) @@ -624,46 +660,46 @@ public void testTwoLevelWithUserMetrics() { .gaugeLong(RESERVED_MB, 0) .gaugeInt(RESERVED_V_CORES, 0) .gaugeInt(RESERVED_CONTAINERS, 0) - .checkAgainst(mqs.parentUserSource); + .checkAgainst(mqs.getRootUserSource()); - mqs.leafMetrics.finishAppAttempt( + mqs.getLeafMetrics().finishAppAttempt( app.getApplicationId(), app.isPending(), app.getUser()); appMetricsQueueSourceChecker = AppMetricsChecker .createFromChecker(appMetricsQueueSourceChecker) .counter(APPS_SUBMITTED, 1) .gaugeInt(APPS_RUNNING, 0) - .checkAgainst(mqs.leafQueueSource, true); + .checkAgainst(mqs.getLeafQueueSource(), true); appMetricsParentQueueSourceChecker = AppMetricsChecker .createFromChecker(appMetricsParentQueueSourceChecker) .counter(APPS_SUBMITTED, 1) .gaugeInt(APPS_PENDING, 0) .gaugeInt(APPS_RUNNING, 0) - .checkAgainst(mqs.parentQueueSource, true); + .checkAgainst(mqs.getRootQueueSource(), true); appMetricsUserSourceChecker = AppMetricsChecker .createFromChecker(appMetricsUserSourceChecker) .counter(APPS_SUBMITTED, 1) .gaugeInt(APPS_RUNNING, 0) - .checkAgainst(mqs.userSource, true); + .checkAgainst(mqs.getLeafUserSource(), true); appMetricsParentUserSourceChecker = AppMetricsChecker .createFromChecker(appMetricsParentUserSourceChecker) .counter(APPS_SUBMITTED, 1) .gaugeInt(APPS_PENDING, 0) .gaugeInt(APPS_RUNNING, 0) - .checkAgainst(mqs.parentUserSource, true); + .checkAgainst(mqs.getRootUserSource(), true); - mqs.leafMetrics.finishApp(user, RMAppState.FINISHED); + mqs.getLeafMetrics().finishApp(user, RMAppState.FINISHED); AppMetricsChecker.createFromChecker(appMetricsQueueSourceChecker) .counter(APPS_COMPLETED, 1) - .checkAgainst(mqs.leafQueueSource, true); + .checkAgainst(mqs.getLeafQueueSource(), true); AppMetricsChecker.createFromChecker(appMetricsParentQueueSourceChecker) .counter(APPS_COMPLETED, 1) - .checkAgainst(mqs.parentQueueSource, true); + .checkAgainst(mqs.getRootQueueSource(), true); AppMetricsChecker.createFromChecker(appMetricsUserSourceChecker) .counter(APPS_COMPLETED, 1) - .checkAgainst(mqs.userSource, true); + .checkAgainst(mqs.getLeafUserSource(), true); AppMetricsChecker.createFromChecker(appMetricsParentUserSourceChecker) .counter(APPS_COMPLETED, 1) - .checkAgainst(mqs.parentUserSource, true); + .checkAgainst(mqs.getRootUserSource(), true); } @Test 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/TestQueueMetricsForCustomResources.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetricsForCustomResources.java index 0b26f4865f6..8050196442c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetricsForCustomResources.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestQueueMetricsForCustomResources.java @@ -102,7 +102,7 @@ static void assertCustomResourceValueInternal( MetricsForCustomResource metricsType, String resourceName, long expectedValue, Long value) { assertNotNull( - "QueueMetrics should have custom resource metrics value" + + "QueueMetrics should have custom resource metrics value " + "for resource: " + resourceName, value); assertEquals(String.format( "QueueMetrics should have custom resource metrics value %d " + @@ -297,8 +297,8 @@ public void testReleaseResources() { public void testUpdatePreemptedSecondsForCustomResources() { QueueMetricsTestcase testcase = QueueMetricsTestcase.Builder.create() .withMetricSystem(ms) - .withParentQueueName(ROOT_QUEUE_NAME) - .withLeafQueueName(LEAF_QUEUE_NAME) + .withQueueHierarchy("root", "root.subQueue", "root.subQueue.subQueue2", + "root.subQueue.subQueue2.leafQueue") .withUser(USER) .withPartition(RMNodeLabelsManager.NO_LABEL) .withContainers(5) @@ -313,11 +313,11 @@ public void testUpdatePreemptedSecondsForCustomResources() { } @Test - public void testUpdatePreemptedSecondsForCustomResources2() { + public void testUpdatePreemptedSecondsForCustomResourcesMoreSeconds() { QueueMetricsTestcase testcase = QueueMetricsTestcase.Builder.create() .withMetricSystem(ms) - .withParentQueueName(ROOT_QUEUE_NAME) - .withLeafQueueName(LEAF_QUEUE_NAME) + .withQueueHierarchy("root", "root.subQueue", "root.subQueue.subQueue2", + "root.subQueue.subQueue2.leafQueue") .withUser(USER) .withPartition(RMNodeLabelsManager.NO_LABEL) .withContainers(5) @@ -405,7 +405,7 @@ public void testGetAllocatedResourcesWithoutCustomResources() { @Test public void testGetMaxUtilizationOfCustomResourcesWithoutAllocatedResource() { MultiQueueSetup mqs = new MultiQueueSetup(ms, - ROOT_QUEUE_NAME, LEAF_QUEUE_NAME, USER); + QueueHierarchy.create(ROOT_QUEUE_NAME, LEAF_QUEUE_NAME), USER); Resource clusterResource = ResourceTypesTestHelper.newResource(4 * GB, 8, ImmutableMap.builder() .put(CUSTOM_RES_1, @@ -413,7 +413,7 @@ public void testGetMaxUtilizationOfCustomResourcesWithoutAllocatedResource() { .put(CUSTOM_RES_2, String.valueOf(0L)) .build()); - float utilization = mqs.leafMetrics + float utilization = mqs.getLeafMetrics() .getMaxUtilizationOfCustomResources(clusterResource); assertEquals(0, utilization, 0.0); } @@ -421,7 +421,7 @@ public void testGetMaxUtilizationOfCustomResourcesWithoutAllocatedResource() { @Test public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource() { MultiQueueSetup mqs = new MultiQueueSetup(ms, - ROOT_QUEUE_NAME, LEAF_QUEUE_NAME, USER); + QueueHierarchy.create(ROOT_QUEUE_NAME, LEAF_QUEUE_NAME), USER); Resource allocatedResource = ResourceTypesTestHelper.newResource(4 * GB, 8, ImmutableMap.builder() @@ -430,8 +430,8 @@ public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource() { .put(CUSTOM_RES_2, String.valueOf(20L)) .build()); - mqs.leafMetrics.allocateResources(RMNodeLabelsManager.NO_LABEL, mqs.user, 1, - allocatedResource, false); + mqs.getLeafMetrics().allocateResources(RMNodeLabelsManager.NO_LABEL, + mqs.user, 1, allocatedResource, false); Resource clusterResource = ResourceTypesTestHelper.newResource(4 * GB, 8, ImmutableMap.builder() @@ -440,7 +440,7 @@ public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource() { .put(CUSTOM_RES_2, String.valueOf(0L)) .build()); - float utilization = mqs.leafMetrics + float utilization = mqs.getLeafMetrics() .getMaxUtilizationOfCustomResources(clusterResource); assertEquals(0, utilization, 0.0); } @@ -448,7 +448,7 @@ public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource() { @Test public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource2() { MultiQueueSetup mqs = new MultiQueueSetup(ms, - ROOT_QUEUE_NAME, LEAF_QUEUE_NAME, USER); + QueueHierarchy.create(ROOT_QUEUE_NAME, LEAF_QUEUE_NAME), USER); Resource allocatedResource = ResourceTypesTestHelper.newResource(4 * GB, 8, ImmutableMap.builder() @@ -457,8 +457,8 @@ public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource2() { .put(CUSTOM_RES_2, String.valueOf(20L)) .build()); - mqs.leafMetrics.allocateResources(RMNodeLabelsManager.NO_LABEL, mqs.user, 1, - allocatedResource, false); + mqs.getLeafMetrics().allocateResources(RMNodeLabelsManager.NO_LABEL, + mqs.user, 1, allocatedResource, false); Resource clusterResource = ResourceTypesTestHelper.newResource(4 * GB, 8, ImmutableMap.builder() @@ -467,7 +467,7 @@ public void testGetMaxUtilizationOfCustomResourcesWithAllocatedResource2() { .put(CUSTOM_RES_2, String.valueOf(5L)) .build()); - float utilization = mqs.leafMetrics + float utilization = mqs.getLeafMetrics() .getMaxUtilizationOfCustomResources(clusterResource); assertEquals(4.0, utilization, 0.0); }