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/common/fica/FiCaSchedulerApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java index 6507259f10c..24afd263c0c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java @@ -987,6 +987,11 @@ public void nodePartitionUpdated(RMContainer rmContainer, String oldPartition, getCSLeafQueue().decAMUsedResource(oldPartition, containerResource, this); getCSLeafQueue().incAMUsedResource(newPartition, containerResource, this); } + + getCSLeafQueue().getMetrics().releaseResources(oldPartition, + getUser(), 1, containerResource); + getCSLeafQueue().getMetrics().allocateResources(newPartition, + getUser(), 1, containerResource, false); } protected void getPendingAppDiagnosticMessage( 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/capacity/TestCapacitySchedulerNodeLabelUpdate.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNodeLabelUpdate.java index d7f81c46260..19302e03314 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNodeLabelUpdate.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNodeLabelUpdate.java @@ -341,8 +341,13 @@ public RMNodeLabelsManager createNodeLabelManager() { checkUserUsedResource(rm, "a", "user", "z", 1024); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("x").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue(). + getMetrics().getPartitionQueueMetrics("x").getAllocatedMB()); Assert.assertEquals(1024, app.getAppAttemptResourceUsage().getUsed("z").getMemorySize()); + Assert.assertEquals(1024, app.getCSLeafQueue(). + getMetrics().getPartitionQueueMetrics("z").getAllocatedMB()); + // change h1's label to y mgr.replaceLabelsOnNode(ImmutableMap.of(nm1.getNodeId(), toSet("y"))); @@ -366,10 +371,16 @@ public RMNodeLabelsManager createNodeLabelManager() { checkUserUsedResource(rm, "a", "user", "z", 0); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("x").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue(). + getMetrics().getPartitionQueueMetrics("x").getAllocatedMB()); Assert.assertEquals(1024, app.getAppAttemptResourceUsage().getUsed("y").getMemorySize()); + Assert.assertEquals(1024, app.getCSLeafQueue(). + getMetrics().getPartitionQueueMetrics("y").getAllocatedMB()); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("z").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue(). + getMetrics().getPartitionQueueMetrics("z").getAllocatedMB()); // change h1's label to no label Set emptyLabels = new HashSet<>(); @@ -396,12 +407,20 @@ public RMNodeLabelsManager createNodeLabelManager() { checkUserUsedResource(rm, "a", "user", "", 2048); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("x").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue().getMetrics(). + getPartitionQueueMetrics("x").getAllocatedMB()); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("y").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue().getMetrics(). + getPartitionQueueMetrics("y").getAllocatedMB()); Assert.assertEquals(0, app.getAppAttemptResourceUsage().getUsed("z").getMemorySize()); + Assert.assertEquals(0, app.getCSLeafQueue().getMetrics(). + getPartitionQueueMetrics("z").getAllocatedMB()); Assert.assertEquals(2048, app.getAppAttemptResourceUsage().getUsed("").getMemorySize()); + Assert.assertEquals(2048, app.getCSLeafQueue().getMetrics(). + getPartitionQueueMetrics("").getAllocatedMB()); // Finish the two containers, we should see used resource becomes 0 cs.completedContainer(cs.getRMContainer(containerId2),