diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerQueueInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerQueueInfo.java index d856871..585474c 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerQueueInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerQueueInfo.java @@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlTransient; +import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceUsage; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue; @@ -56,6 +57,9 @@ protected CapacitySchedulerQueueInfoList queues; protected ResourceInfo resourcesUsed; private boolean hideReservationQueues = false; + @SuppressWarnings("unused") + private String accessibleLabels; + @XmlTransient protected ArrayList nodeLabels = new ArrayList(); protected long allocatedContainers; protected long reservedContainers; @@ -100,6 +104,7 @@ nodeLabels.addAll(labelSet); Collections.sort(nodeLabels); } + accessibleLabels = StringUtils.join(',', nodeLabels); } public float getCapacity() { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java index dad720e..2fd44d8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java @@ -24,6 +24,8 @@ import static org.junit.Assert.fail; import java.io.StringReader; +import java.util.HashSet; +import java.util.Set; import javax.ws.rs.core.MediaType; import javax.xml.parsers.DocumentBuilder; @@ -43,6 +45,7 @@ import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; @@ -147,7 +150,11 @@ private static void setupQueueConfiguration( conf.setUserLimitFactor(B2, 100.0f); conf.setCapacity(B3, 0.5f); conf.setUserLimitFactor(B3, 100.0f); - + Set labels = new HashSet(); + labels.add("b3"); + labels.add("a3"); + conf.setAccessibleNodeLabels(B3, labels); + conf.setQueues(A1, new String[] {"a1a", "a1b"}); final String A1A = A1 + ".a1a"; conf.setCapacity(A1A, 85); @@ -278,6 +285,7 @@ public void verifySubQueueXML(Element qElem, String q, qi.queueName = WebServicesTestUtils.getXmlString(qElem, "queueName"); qi.state = WebServicesTestUtils.getXmlString(qElem, "state"); verifySubQueueGeneric(q, qi, parentAbsCapacity, parentAbsMaxCapacity); + verifyQueueLabel(qElem, qi); if (hasSubQueues) { for (int j = 0; j < children.getLength(); j++) { Element qElem2 = (Element) children.item(j); @@ -287,7 +295,8 @@ public void verifySubQueueXML(Element qElem, String q, Element qElem3 = (Element) qListInfos.item(k); String qName3 = WebServicesTestUtils.getXmlString(qElem3, "queueName"); String q3 = q + "." + qName3; - verifySubQueueXML(qElem3, q3, qi.absoluteCapacity, qi.absoluteMaxCapacity); + verifySubQueueXML(qElem3, q3, qi.absoluteCapacity, + qi.absoluteMaxCapacity); } } } @@ -310,6 +319,16 @@ public void verifySubQueueXML(Element qElem, String q, } } + private void verifyQueueLabel(Element qElem, QueueInfo qi) { + String accessibleLabels = + WebServicesTestUtils.getXmlString(qElem, "accessibleLabels"); + if (qi.queueName.equals("b3")) { + Assert.assertEquals(qi.queueName, "a3,b3", accessibleLabels); + } else { + Assert.assertEquals(qi.queueName, "*", accessibleLabels); + } + } + private void verifyClusterScheduler(JSONObject json) throws JSONException, Exception { assertEquals("incorrect number of elements", 1, json.length());