merge -r 1309132:1309133 from trunk. FIXES: MAPREDUCE-4020

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1309134 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Thomas Graves 2012-04-03 20:41:22 +00:00
parent 40a8dfa3c6
commit 4a3e9514c3
8 changed files with 437 additions and 324 deletions

View File

@ -138,6 +138,9 @@ Release 0.23.3 - UNRELEASED
MAPREDUCE-3999. Tracking link gives an error if the AppMaster hasn't
started yet (Ravi Prakash via bobby)
MAPREDUCE-4020. Web services returns incorrect JSON for deep queue tree
(Anupam Seth via tgraves)
Release 0.23.2 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -100,8 +100,8 @@ class CapacitySchedulerPage extends RmView {
@Override
public void render(Block html) {
ArrayList<CapacitySchedulerQueueInfo> subQueues =
(csqinfo.qinfo == null) ? csqinfo.csinfo.getSubQueues()
: csqinfo.qinfo.getSubQueues();
(csqinfo.qinfo == null) ? csqinfo.csinfo.getQueues().getQueueInfoList()
: csqinfo.qinfo.getQueues().getQueueInfoList();
UL<Hamlet> ul = html.ul("#pq");
for (CapacitySchedulerQueueInfo info : subQueues) {
float used = info.getUsedCapacity() / 100;
@ -122,7 +122,7 @@ class CapacitySchedulerPage extends RmView {
_(join(percent(used), " used"))._();
csqinfo.qinfo = info;
if (info.getSubQueues() == null) {
if (info.getQueues() == null) {
li.ul("#lq").li()._(LeafQueueInfoBlock.class)._()._();
} else {
li._(QueueBlock.class);

View File

@ -34,6 +34,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfoList;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FifoSchedulerInfo;
@ -57,7 +58,7 @@ public class JAXBContextResolver implements ContextResolver<JAXBContext> {
SchedulerTypeInfo.class, NodeInfo.class, UserMetricsInfo.class,
CapacitySchedulerInfo.class, ClusterMetricsInfo.class,
SchedulerInfo.class, AppsInfo.class, NodesInfo.class,
RemoteExceptionData.class};
RemoteExceptionData.class, CapacitySchedulerQueueInfoList.class};
public JAXBContextResolver() throws Exception {
this.types = new HashSet<Class>(Arrays.asList(cTypes));

View File

@ -18,8 +18,6 @@
package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@ -38,7 +36,7 @@ public class CapacitySchedulerInfo extends SchedulerInfo {
protected float usedCapacity;
protected float maxCapacity;
protected String queueName;
protected ArrayList<CapacitySchedulerQueueInfo> queues;
protected CapacitySchedulerQueueInfoList queues;
@XmlTransient
static final float EPSILON = 1e-8f;
@ -74,22 +72,22 @@ public class CapacitySchedulerInfo extends SchedulerInfo {
return this.queueName;
}
public ArrayList<CapacitySchedulerQueueInfo> getSubQueues() {
public CapacitySchedulerQueueInfoList getQueues() {
return this.queues;
}
protected ArrayList<CapacitySchedulerQueueInfo> getQueues(CSQueue parent) {
protected CapacitySchedulerQueueInfoList getQueues(CSQueue parent) {
CSQueue parentQueue = parent;
ArrayList<CapacitySchedulerQueueInfo> queuesInfo = new ArrayList<CapacitySchedulerQueueInfo>();
CapacitySchedulerQueueInfoList queuesInfo = new CapacitySchedulerQueueInfoList();
for (CSQueue queue : parentQueue.getChildQueues()) {
CapacitySchedulerQueueInfo info;
if (queue instanceof LeafQueue) {
info = new CapacitySchedulerLeafQueueInfo((LeafQueue)queue);
} else {
info = new CapacitySchedulerQueueInfo(queue);
info.subQueues = getQueues(queue);
info.queues = getQueues(queue);
}
queuesInfo.add(info);
queuesInfo.addToQueueInfoList(info);
}
return queuesInfo;
}

View File

@ -17,8 +17,6 @@
*/
package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@ -49,7 +47,7 @@ public class CapacitySchedulerQueueInfo {
protected String usedResources;
protected String queueName;
protected QueueState state;
protected ArrayList<CapacitySchedulerQueueInfo> subQueues;
protected CapacitySchedulerQueueInfoList queues;
CapacitySchedulerQueueInfo() {
};
@ -117,8 +115,8 @@ public class CapacitySchedulerQueueInfo {
return this.queuePath;
}
public ArrayList<CapacitySchedulerQueueInfo> getSubQueues() {
return this.subQueues;
public CapacitySchedulerQueueInfoList getQueues() {
return this.queues;
}
/**

View File

@ -0,0 +1,46 @@
/**
* 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.webapp.dao;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CapacitySchedulerQueueInfoList {
protected ArrayList<CapacitySchedulerQueueInfo> queue;
public CapacitySchedulerQueueInfoList() {
queue = new ArrayList<CapacitySchedulerQueueInfo>();
}
public ArrayList<CapacitySchedulerQueueInfo> getQueueInfoList() {
return this.queue;
}
public boolean addToQueueInfoList(CapacitySchedulerQueueInfo e) {
return this.queue.add(e);
}
public CapacitySchedulerQueueInfo getQueueInfo(int i) {
return this.queue.get(i);
}
}

View File

@ -152,6 +152,11 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
conf.setCapacity(B3, 20);
conf.setUserLimitFactor(B3, 100.0f);
conf.setQueues(A1, new String[] {"a1a", "a1b"});
final String A1A = A1 + ".a1a";
conf.setCapacity(A1A, 85);
final String A1B = A1 + ".a1b";
conf.setCapacity(A1B, 15);
}
@Before
@ -232,12 +237,18 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
WebServicesTestUtils.getXmlFloat(element, "maxCapacity"),
WebServicesTestUtils.getXmlString(element, "queueName"));
NodeList queues = element.getElementsByTagName("queues");
for (int j = 0; j < queues.getLength(); j++) {
Element qElem = (Element) queues.item(j);
String qName = WebServicesTestUtils.getXmlString(qElem, "queueName");
String q = CapacitySchedulerConfiguration.ROOT + "." + qName;
verifySubQueueXML(qElem, q, 100, 100);
NodeList children = element.getChildNodes();
for (int j = 0; j < children.getLength(); j++) {
Element qElem = (Element) children.item(j);
if(qElem.getTagName().equals("queues")) {
NodeList qListInfos = qElem.getChildNodes();
for (int k = 0; k < qListInfos.getLength(); k++) {
Element qElem2 = (Element) qListInfos.item(k);
String qName2 = WebServicesTestUtils.getXmlString(qElem2, "queueName");
String q2 = CapacitySchedulerConfiguration.ROOT + "." + qName2;
verifySubQueueXML(qElem2, q2, 100, 100);
}
}
}
}
}
@ -245,8 +256,18 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
public void verifySubQueueXML(Element qElem, String q,
float parentAbsCapacity, float parentAbsMaxCapacity)
throws Exception {
NodeList queues = qElem.getElementsByTagName("subQueues");
QueueInfo qi = (queues != null) ? new QueueInfo() : new LeafQueueInfo();
NodeList children = qElem.getChildNodes();
boolean hasSubQueues = false;
for (int j = 0; j < children.getLength(); j++) {
Element qElem2 = (Element) children.item(j);
if(qElem2.getTagName().equals("queues")) {
NodeList qListInfos = qElem2.getChildNodes();
if (qListInfos.getLength() > 0) {
hasSubQueues = true;
}
}
}
QueueInfo qi = (hasSubQueues) ? new QueueInfo() : new LeafQueueInfo();
qi.capacity = WebServicesTestUtils.getXmlFloat(qElem, "capacity");
qi.usedCapacity =
WebServicesTestUtils.getXmlFloat(qElem, "usedCapacity");
@ -263,14 +284,18 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
qi.queueName = WebServicesTestUtils.getXmlString(qElem, "queueName");
qi.state = WebServicesTestUtils.getXmlString(qElem, "state");
verifySubQueueGeneric(q, qi, parentAbsCapacity, parentAbsMaxCapacity);
if (queues != null) {
for (int j = 0; j < queues.getLength(); j++) {
Element subqElem = (Element) queues.item(j);
String qName = WebServicesTestUtils.getXmlString(subqElem, "queueName");
String q2 = q + "." + qName;
verifySubQueueXML(subqElem, q2,
qi.absoluteCapacity, qi.absoluteMaxCapacity);
if (hasSubQueues) {
for (int j = 0; j < children.getLength(); j++) {
Element qElem2 = (Element) children.item(j);
if(qElem2.getTagName().equals("queues")) {
NodeList qListInfos = qElem2.getChildNodes();
for (int k = 0; k < qListInfos.getLength(); k++) {
Element qElem3 = (Element) qListInfos.item(k);
String qName3 = WebServicesTestUtils.getXmlString(qElem3, "queueName");
String q3 = q + "." + qName3;
verifySubQueueXML(qElem3, q3, qi.absoluteCapacity, qi.absoluteMaxCapacity);
}
}
}
} else {
LeafQueueInfo lqi = (LeafQueueInfo) qi;
@ -307,7 +332,7 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
(float) info.getDouble("capacity"),
(float) info.getDouble("maxCapacity"), info.getString("queueName"));
JSONArray arr = info.getJSONArray("queues");
JSONArray arr = info.getJSONObject("queues").getJSONArray("queue");
assertEquals("incorrect number of elements", 2, arr.length());
// test subqueues
@ -333,7 +358,7 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
throws JSONException, Exception {
int numExpectedElements = 11;
boolean isParentQueue = true;
if (!info.has("subQueues")) {
if (!info.has("queues")) {
numExpectedElements = 20;
isParentQueue = false;
}
@ -354,7 +379,7 @@ public class TestRMWebServicesCapacitySched extends JerseyTest {
verifySubQueueGeneric(q, qi, parentAbsCapacity, parentAbsMaxCapacity);
if (isParentQueue) {
JSONArray arr = info.getJSONArray("subQueues");
JSONArray arr = info.getJSONObject("queues").getJSONArray("queue");
// test subqueues
for (int i = 0; i < arr.length(); i++) {
JSONObject obj = arr.getJSONObject(i);

View File

@ -324,7 +324,7 @@ ResourceManager REST API's.
| queues | array of queues(JSON)/zero or more queue objects(XML) | A collection of queue resources|
*---------------+--------------+-------------------------------+
** Elements of the queues/subQueues object for a Parent queue
** Elements of the queues object for a Parent queue
*---------------+--------------+-------------------------------+
|| Item || Data Type || Description |
@ -349,10 +349,10 @@ ResourceManager REST API's.
*---------------+--------------+-------------------------------+
| state | string of QueueState | The state of the queue |
*---------------+--------------+-------------------------------+
| subQueues | array of queues(JSON)/zero or more queue objects(XML) | A collection of sub-queue information|
| queues | array of queues(JSON)/zero or more queue objects(XML) | A collection of sub-queue information|
*---------------+--------------+-------------------------------+
** Elements of the queues/subQueues object for a Leaf queue - contains all elements in parent plus the following:
** Elements of the queues object for a Leaf queue - contains all elements in parent plus the following:
*---------------+--------------+-------------------------------+
|| Item || Data Type || Description |
@ -406,12 +406,13 @@ ResourceManager REST API's.
"queueName" : "root",
"maxCapacity" : 100,
"type" : "capacityScheduler",
"queues" : [
"queues" : {
"queue" : [
{
"numPendingApplications" : 0,
"queueName" : "default",
"userLimitFactor" : 1,
"maxApplications" : 7000,
"maxApplications" : 1,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
@ -427,42 +428,85 @@ ResourceManager REST API's.
"maxActiveApplicationsPerUser" : 1,
"capacity" : 70,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 7000
"maxApplicationsPerUser" : 1
},
{
"queueName" : "test",
"absoluteUsedCapacity" : 0,
"absoluteCapacity" : 20,
"usedCapacity" : 0,
"capacity" : 20,
"subQueues" : [
"state" : "RUNNING",
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"queues" : {
"queue" : [
{
"queueName" : "a1",
"absoluteCapacity" : 12,
"usedCapacity" : 0,
"capacity" : 60.000004,
"state" : "RUNNING",
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"queues" : {
"queue" : [
{
"numPendingApplications" : 0,
"queueName" : "a1",
"queueName" : "a11",
"userLimitFactor" : 1,
"maxApplications" : 1200,
"maxApplications" : 0,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
"maxCapacity" : 80,
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 16.000002,
"absoluteMaxCapacity" : 100,
"maxActiveApplications" : 1,
"numActiveApplications" : 0,
"absoluteUsedCapacity" : 0,
"userLimit" : 100,
"absoluteCapacity" : 12,
"absoluteCapacity" : 10.200001,
"maxActiveApplicationsPerUser" : 1,
"capacity" : 60.000004,
"capacity" : 85,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 1200
"maxApplicationsPerUser" : 0
},
{
"numPendingApplications" : 0,
"queueName" : "a12",
"userLimitFactor" : 1,
"maxApplications" : 0,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"maxActiveApplications" : 1,
"numActiveApplications" : 0,
"absoluteUsedCapacity" : 0,
"userLimit" : 100,
"absoluteCapacity" : 1.8000001,
"maxActiveApplicationsPerUser" : 1,
"capacity" : 15.000001,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 0
}
]
},
"absoluteUsedCapacity" : 0
},
{
"numPendingApplications" : 0,
"queueName" : "a2",
"userLimitFactor" : 1,
"maxApplications" : 800,
"maxApplications" : 0,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
@ -478,78 +522,58 @@ ResourceManager REST API's.
"maxActiveApplicationsPerUser" : 1,
"capacity" : 40,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 800
"maxApplicationsPerUser" : 0
}
],
"state" : "RUNNING",
"maxCapacity" : 80,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 80
]
},
"absoluteUsedCapacity" : 0
},
{
"queueName" : "test2",
"absoluteUsedCapacity" : 0,
"absoluteCapacity" : 10,
"usedCapacity" : 0,
"capacity" : 10,
"subQueues" : [
{
"numPendingApplications" : 0,
"queueName" : "a5",
"userLimitFactor" : 1,
"maxApplications" : 500,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
"maxCapacity" : 100,
"maxCapacity" : 15.000001,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"maxActiveApplications" : 1,
"numActiveApplications" : 0,
"absoluteUsedCapacity" : 0,
"userLimit" : 100,
"absoluteCapacity" : 5,
"maxActiveApplicationsPerUser" : 1,
"capacity" : 50,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 500
},
"absoluteMaxCapacity" : 15.000001,
"queues" : {
"queue" : [
{
"numPendingApplications" : 0,
"queueName" : "a3",
"userLimitFactor" : 1,
"maxApplications" : 400,
"maxApplications" : 0,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"absoluteMaxCapacity" : 15.000001,
"maxActiveApplications" : 1,
"numActiveApplications" : 0,
"absoluteUsedCapacity" : 0,
"userLimit" : 100,
"absoluteCapacity" : 4.0000005,
"absoluteCapacity" : 9,
"maxActiveApplicationsPerUser" : 1,
"capacity" : 40,
"capacity" : 90,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 400
"maxApplicationsPerUser" : 0
},
{
"numPendingApplications" : 0,
"queueName" : "a4",
"userLimitFactor" : 1,
"maxApplications" : 100,
"maxApplications" : 0,
"usedCapacity" : 0,
"numContainers" : 0,
"state" : "RUNNING",
"maxCapacity" : 100,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 100,
"absoluteMaxCapacity" : 15.000001,
"maxActiveApplications" : 1,
"numActiveApplications" : 0,
"absoluteUsedCapacity" : 0,
@ -558,16 +582,14 @@ ResourceManager REST API's.
"maxActiveApplicationsPerUser" : 1,
"capacity" : 10,
"type" : "capacitySchedulerLeafQueueInfo",
"maxApplicationsPerUser" : 100
"maxApplicationsPerUser" : 0
}
],
"state" : "RUNNING",
"maxCapacity" : 15.000001,
"numApplications" : 0,
"usedResources" : "memory: 0",
"absoluteMaxCapacity" : 15.000001
]
},
"absoluteUsedCapacity" : 0
}
],
]
},
"usedCapacity" : 0,
"capacity" : 100
}
@ -575,7 +597,7 @@ ResourceManager REST API's.
}
+---+
<<JSON response>>
<<XML response>>
HTTP Request:
@ -603,7 +625,8 @@ ResourceManager REST API's.
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<queueName>root</queueName>
<queues xsi:type="capacitySchedulerLeafQueueInfo">
<queues>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>70.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>90.0</maxCapacity>
@ -617,46 +640,82 @@ ResourceManager REST API's.
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>7000</maxApplications>
<maxApplicationsPerUser>7000</maxApplicationsPerUser>
<maxApplications>1</maxApplications>
<maxApplicationsPerUser>1</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</queues>
<queues>
</queue>
<queue>
<capacity>20.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>80.0</maxCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>20.0</absoluteCapacity>
<absoluteMaxCapacity>80.0</absoluteMaxCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
<queueName>test</queueName>
<state>RUNNING</state>
<subQueues xsi:type="capacitySchedulerLeafQueueInfo">
<queues>
<queue>
<capacity>60.000004</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>80.0</maxCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>12.0</absoluteCapacity>
<absoluteMaxCapacity>16.000002</absoluteMaxCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
<queueName>a1</queueName>
<state>RUNNING</state>
<queues>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>85.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>10.200001</absoluteCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
<queueName>a11</queueName>
<state>RUNNING</state>
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>1200</maxApplications>
<maxApplicationsPerUser>1200</maxApplicationsPerUser>
<maxApplications>0</maxApplications>
<maxApplicationsPerUser>0</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</subQueues>
<subQueues xsi:type="capacitySchedulerLeafQueueInfo">
</queue>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>15.000001</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>1.8000001</absoluteCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
<queueName>a12</queueName>
<state>RUNNING</state>
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>0</maxApplications>
<maxApplicationsPerUser>0</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</queue>
</queues>
</queue>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>40.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
@ -670,15 +729,16 @@ ResourceManager REST API's.
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>800</maxApplications>
<maxApplicationsPerUser>800</maxApplicationsPerUser>
<maxApplications>0</maxApplications>
<maxApplicationsPerUser>0</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</subQueues>
</queue>
</queues>
<queues>
</queue>
<queue>
<capacity>10.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>15.000001</maxCapacity>
@ -689,33 +749,13 @@ ResourceManager REST API's.
<usedResources>memory: 0</usedResources>
<queueName>test2</queueName>
<state>RUNNING</state>
<subQueues xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>50.0</capacity>
<queues>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>90.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>5.0</absoluteCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
<queueName>A4</queueName>
<state>RUNNING</state>
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>500</maxApplications>
<maxApplicationsPerUser>500</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</subQueues>
<subQueues xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>40.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>4.0000005</absoluteCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteCapacity>9.0</absoluteCapacity>
<absoluteMaxCapacity>15.000001</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
@ -724,19 +764,19 @@ ResourceManager REST API's.
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>400</maxApplications>
<maxApplicationsPerUser>400</maxApplicationsPerUser>
<maxApplications>0</maxApplications>
<maxApplicationsPerUser>0</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</subQueues>
<subQueues xsi:type="capacitySchedulerLeafQueueInfo">
</queue>
<queue xsi:type="capacitySchedulerLeafQueueInfo">
<capacity>10.0</capacity>
<usedCapacity>0.0</usedCapacity>
<maxCapacity>100.0</maxCapacity>
<absoluteCapacity>1.0000001</absoluteCapacity>
<absoluteMaxCapacity>100.0</absoluteMaxCapacity>
<absoluteMaxCapacity>15.000001</absoluteMaxCapacity>
<absoluteUsedCapacity>0.0</absoluteUsedCapacity>
<numApplications>0</numApplications>
<usedResources>memory: 0</usedResources>
@ -745,13 +785,15 @@ ResourceManager REST API's.
<numActiveApplications>0</numActiveApplications>
<numPendingApplications>0</numPendingApplications>
<numContainers>0</numContainers>
<maxApplications>100</maxApplications>
<maxApplicationsPerUser>100</maxApplicationsPerUser>
<maxApplications>0</maxApplications>
<maxApplicationsPerUser>0</maxApplicationsPerUser>
<maxActiveApplications>1</maxActiveApplications>
<maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
<userLimit>100</userLimit>
<userLimitFactor>1.0</userLimitFactor>
</subQueues>
</queue>
</queues>
</queue>
</queues>
</schedulerInfo>
</scheduler>