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 12ce05f2791..0bed1a1db09 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 @@ -712,7 +712,9 @@ protected QueueInfo getQueueInfo() { QueueInfo queueInfo = recordFactory.newRecordInstance(QueueInfo.class); queueInfo.setQueueName(queueName); queueInfo.setAccessibleNodeLabels(accessibleLabels); - queueInfo.setCapacity(queueCapacities.getCapacity()); + queueInfo.setCapacity(queueCapacities.getWeight() != -1 ? + queueCapacities.getNormalizedWeight() : + queueCapacities.getCapacity()); queueInfo.setMaximumCapacity(queueCapacities.getMaximumCapacity()); queueInfo.setQueueState(getState()); queueInfo.setDefaultNodeLabelExpression(defaultLabelExpression); 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/TestCapacityScheduler.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/TestCapacityScheduler.java index d5d89cae866..78afdc195bb 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/TestCapacityScheduler.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/TestCapacityScheduler.java @@ -1144,7 +1144,7 @@ public void testRefreshQueuesWithNewQueue() throws Exception { @Test public void testCapacitySchedulerInfo() throws Exception { QueueInfo queueInfo = resourceManager.getResourceScheduler().getQueueInfo("a", true, true); - Assert.assertEquals("Queue Name should be a", "a", + Assert.assertEquals("Queue Name should be a", "root.a", queueInfo.getQueueName()); Assert.assertEquals("Child Queues size should be 2", 2, queueInfo.getChildQueues().size()); 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/TestCapacitySchedulerWeightMode.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/TestCapacitySchedulerWeightMode.java index bdf4d8d455e..7254d1fb389 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/TestCapacitySchedulerWeightMode.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/TestCapacitySchedulerWeightMode.java @@ -297,6 +297,40 @@ public void testContainerAllocateWithComplexLabelsWeightAndPercentMixed2() throw getCSConfWithLabelsParentUsePctChildUseWeight(conf)); } + @Test + public void testQueueInfoCapacityInWeightMode() throws Exception { + MockRM rm = new MockRM(conf); + rm.init(conf); + rm.start(); + + CapacitySchedulerConfiguration csConf = new CapacitySchedulerConfiguration( + conf); + csConf.setQueues(CapacitySchedulerConfiguration.ROOT, + new String[] { "a", "b", "default"}); + csConf.setNonLabeledQueueWeight("root.a", 1); + csConf.setNonLabeledQueueWeight("root.b", 2); + csConf.setNonLabeledQueueWeight("root.default", 3); + + // Check queue info capacity + CapacityScheduler cs = + (CapacityScheduler)rm.getRMContext().getScheduler(); + cs.reinitialize(csConf, rm.getRMContext()); + + LeafQueue a = (LeafQueue) + cs.getQueue("root.a"); + Assert.assertNotNull(a); + Assert.assertEquals(a.getQueueInfo(false, + false).getCapacity(), + a.getQueueCapacities().getNormalizedWeight(), 1e-6); + + LeafQueue b = (LeafQueue) + cs.getQueue("root.b"); + Assert.assertNotNull(b); + Assert.assertEquals(b.getQueueInfo(false, + false).getCapacity(), + b.getQueueCapacities().getNormalizedWeight(), 1e-6); + } + private void internalTestContainerAlloationWithNodeLabel(Configuration csConf) throws Exception { /*