YARN-10596. Allow static definition of childless ParentQueues with auto-queue-creation-v2 enabled. Contributed by Andras Gyori
This commit is contained in:
parent
a9ff726e42
commit
f1766e5bb4
@ -238,14 +238,21 @@ static CSQueue parseQueue(
|
|||||||
boolean isReservableQueue = conf.isReservable(fullQueueName);
|
boolean isReservableQueue = conf.isReservable(fullQueueName);
|
||||||
boolean isAutoCreateEnabled = conf.isAutoCreateChildQueueEnabled(
|
boolean isAutoCreateEnabled = conf.isAutoCreateChildQueueEnabled(
|
||||||
fullQueueName);
|
fullQueueName);
|
||||||
|
// if a queue is eligible for auto queue creation v2
|
||||||
|
// it must be a ParentQueue (even if it is empty)
|
||||||
|
boolean isAutoQueueCreationV2Enabled = conf.isAutoQueueCreationV2Enabled(
|
||||||
|
fullQueueName);
|
||||||
boolean isDynamicParent = false;
|
boolean isDynamicParent = false;
|
||||||
|
|
||||||
|
// Auto created parent queues might not have static children, but they
|
||||||
|
// must be kept as a ParentQueue
|
||||||
CSQueue oldQueue = oldQueues.get(fullQueueName);
|
CSQueue oldQueue = oldQueues.get(fullQueueName);
|
||||||
if (oldQueue instanceof ParentQueue) {
|
if (oldQueue instanceof ParentQueue) {
|
||||||
isDynamicParent = ((ParentQueue) oldQueue).isDynamicQueue();
|
isDynamicParent = ((ParentQueue) oldQueue).isDynamicQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (childQueueNames.size() == 0 && !isDynamicParent) {
|
if (childQueueNames.size() == 0 && !isDynamicParent &&
|
||||||
|
!isAutoQueueCreationV2Enabled) {
|
||||||
if (null == parent) {
|
if (null == parent) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Queue configuration missing child queue names for " + queueName);
|
"Queue configuration missing child queue names for " + queueName);
|
||||||
|
@ -422,6 +422,46 @@ public void testAutoQueueCreationOnAppSubmission() throws Exception {
|
|||||||
Assert.assertTrue(user0.isDynamicQueue());
|
Assert.assertTrue(user0.isDynamicQueue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testChildlessParentQueueWhenAutoQueueCreationEnabled()
|
||||||
|
throws Exception {
|
||||||
|
startScheduler();
|
||||||
|
csConf.setQueues("root", new String[]{"a", "b", "empty-auto-parent"});
|
||||||
|
csConf.setNonLabeledQueueWeight("root", 1f);
|
||||||
|
csConf.setNonLabeledQueueWeight("root.a", 1f);
|
||||||
|
csConf.setNonLabeledQueueWeight("root.b", 1f);
|
||||||
|
csConf.setQueues("root.a", new String[]{"a1"});
|
||||||
|
csConf.setNonLabeledQueueWeight("root.a.a1", 1f);
|
||||||
|
csConf.setAutoQueueCreationV2Enabled("root", true);
|
||||||
|
csConf.setAutoQueueCreationV2Enabled("root.a", true);
|
||||||
|
cs.reinitialize(csConf, mockRM.getRMContext());
|
||||||
|
|
||||||
|
CSQueue empty = cs.getQueue("root.empty-auto-parent");
|
||||||
|
Assert.assertTrue("empty-auto-parent is not a LeafQueue",
|
||||||
|
empty instanceof LeafQueue);
|
||||||
|
empty.stopQueue();
|
||||||
|
|
||||||
|
csConf.setQueues("root", new String[]{"a", "b", "empty-auto-parent"});
|
||||||
|
csConf.setNonLabeledQueueWeight("root", 1f);
|
||||||
|
csConf.setNonLabeledQueueWeight("root.a", 1f);
|
||||||
|
csConf.setNonLabeledQueueWeight("root.b", 1f);
|
||||||
|
csConf.setQueues("root.a", new String[]{"a1"});
|
||||||
|
csConf.setNonLabeledQueueWeight("root.a.a1", 1f);
|
||||||
|
csConf.setAutoQueueCreationV2Enabled("root", true);
|
||||||
|
csConf.setAutoQueueCreationV2Enabled("root.a", true);
|
||||||
|
csConf.setAutoQueueCreationV2Enabled("root.empty-auto-parent", true);
|
||||||
|
cs.reinitialize(csConf, mockRM.getRMContext());
|
||||||
|
|
||||||
|
empty = cs.getQueue("root.empty-auto-parent");
|
||||||
|
Assert.assertTrue("empty-auto-parent is not a ParentQueue",
|
||||||
|
empty instanceof ParentQueue);
|
||||||
|
Assert.assertEquals("empty-auto-parent has children",
|
||||||
|
0, empty.getChildQueues().size());
|
||||||
|
Assert.assertTrue("empty-auto-parent is not eligible " +
|
||||||
|
"for auto queue creation",
|
||||||
|
((ParentQueue)empty).isEligibleForAutoQueueCreation());
|
||||||
|
}
|
||||||
|
|
||||||
private LeafQueue createQueue(String queuePath) throws YarnException {
|
private LeafQueue createQueue(String queuePath) throws YarnException {
|
||||||
return autoQueueHandler.autoCreateQueue(
|
return autoQueueHandler.autoCreateQueue(
|
||||||
CSQueueUtils.extractQueuePath(queuePath));
|
CSQueueUtils.extractQueuePath(queuePath));
|
||||||
|
@ -507,8 +507,6 @@ private static Configuration createWeightConfigInternal(boolean enableAqc) {
|
|||||||
if (enableAqc) {
|
if (enableAqc) {
|
||||||
conf.put("yarn.scheduler.capacity.root.auto-queue-creation-v2.enabled",
|
conf.put("yarn.scheduler.capacity.root.auto-queue-creation-v2.enabled",
|
||||||
"true");
|
"true");
|
||||||
conf.put("yarn.scheduler.capacity.root.default." +
|
|
||||||
"auto-queue-creation-v2.enabled", "true");
|
|
||||||
}
|
}
|
||||||
return createConfiguration(conf);
|
return createConfiguration(conf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user