From bc3e188e11ad3e99ffdfa43335c5b0cd80c031a6 Mon Sep 17 00:00:00 2001 From: Eric Payne Date: Tue, 7 Feb 2017 11:33:28 -0600 Subject: [PATCH] YARN-6152. Used queue percentage not accurate in UI for 2.7 and below when using DominantResourceCalculator. Contributed by Jonathan Hung --- .../scheduler/capacity/AbstractCSQueue.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) 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/capacity/AbstractCSQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java index 3ad4b7f8f8d..544403b3e7a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractCSQueue.java @@ -545,16 +545,17 @@ public abstract class AbstractCSQueue implements CSQueue { * @return used resources by this queue for specified label */ public final synchronized float getUsedCapacity(final String nodeLabel) { + Resource totalPartitionResource = + labelManager.getResourceByLabel(nodeLabel, this.clusterResource); Resource availableToQueue = - Resources.multiply( - labelManager.getResourceByLabel(nodeLabel, this.clusterResource), + Resources.multiply(totalPartitionResource, queueCapacities.getAbsoluteCapacity(nodeLabel)); - if (!Resources.greaterThan(resourceCalculator, this.clusterResource, + if (!Resources.greaterThan(resourceCalculator, totalPartitionResource, availableToQueue, Resources.none())) { return 0.0f; } return - Resources.divide(resourceCalculator, this.clusterResource, + Resources.divide(resourceCalculator, totalPartitionResource, queueUsage.getUsed(nodeLabel), availableToQueue); } @@ -564,13 +565,13 @@ public abstract class AbstractCSQueue implements CSQueue { * @return absolute used resources by this queue for specified label */ public final synchronized float getAbsoluteUsedCapacity(final String nodeLabel) { - Resource labeledResources = - labelManager.getResourceByLabel(nodeLabel, this.clusterResource); - if (!Resources.greaterThan(resourceCalculator, this.clusterResource, - labeledResources, Resources.none())) { + Resource totalPartitionResource = + labelManager.getResourceByLabel(nodeLabel, this.clusterResource); + if (!Resources.greaterThan(resourceCalculator, totalPartitionResource, + totalPartitionResource, Resources.none())) { return 0.0f; } - return Resources.divide(resourceCalculator, this.clusterResource, - queueUsage.getUsed(nodeLabel), labeledResources); + return Resources.divide(resourceCalculator, totalPartitionResource, + queueUsage.getUsed(nodeLabel), totalPartitionResource); } }