YARN-11063. Support auto queue creation template wildcards for arbitrary queue depths. Contributed by Bence Kosztolnik.
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/AutoCreatedQueueTemplate.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/AutoCreatedQueueTemplate.java
index 8fa1e13..bbeca4b 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/AutoCreatedQueueTemplate.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/AutoCreatedQueueTemplate.java
@@ -42,7 +42,6 @@
AUTO_QUEUE_CREATION_V2_PREFIX + "parent-template.";
private static final String WILDCARD_QUEUE = "*";
- private static final int MAX_WILDCARD_LEVEL = 1;
private final Map<String, String> templateProperties = new HashMap<>();
private final Map<String, String> leafOnlyProperties = new HashMap<>();
@@ -86,7 +85,7 @@
/**
* Sets the common template properties and parent specific template
* properties of a child queue based on its parent template settings.
- * @param conf configuration to set
+ * @param conf configuration to set
* @param childQueuePath child queue path used for prefixing the properties
*/
public void setTemplateEntriesForChild(CapacitySchedulerConfiguration conf,
@@ -169,8 +168,8 @@
// start with the most explicit format (without wildcard)
int wildcardLevel = 0;
// root can not be wildcarded
- // MAX_WILDCARD_LEVEL will be configurable in the future
- int supportedWildcardLevel = Math.min(queuePathMaxIndex, MAX_WILDCARD_LEVEL);
+ int supportedWildcardLevel = Math.min(queuePathMaxIndex,
+ configuration.getMaximumAutoCreatedQueueDepth(queuePath.getFullPath()));
// Allow root to have template properties
if (queuePath.isRoot()) {
supportedWildcardLevel = 0;
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/TestAutoCreatedQueueTemplate.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/TestAutoCreatedQueueTemplate.java
index e73001b..201214e 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/TestAutoCreatedQueueTemplate.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/TestAutoCreatedQueueTemplate.java
@@ -67,6 +67,22 @@
}
@Test
+ public void testTwoLevelWildcardTemplate() {
+ conf.set(getTemplateKey("root.*", "capacity"), "6w");
+ conf.set(getTemplateKey("root.*.*", "capacity"), "5w");
+
+ new AutoCreatedQueueTemplate(conf, TEST_QUEUE_A)
+ .setTemplateEntriesForChild(conf, TEST_QUEUE_AB.getFullPath());
+ new AutoCreatedQueueTemplate(conf, TEST_QUEUE_AB)
+ .setTemplateEntriesForChild(conf, TEST_QUEUE_ABC.getFullPath());
+
+ Assert.assertEquals("weight is not set", 6f,
+ conf.getNonLabeledQueueWeight(TEST_QUEUE_AB.getFullPath()), 10e-6);
+ Assert.assertEquals("weight is not set", 5f,
+ conf.getNonLabeledQueueWeight(TEST_QUEUE_ABC.getFullPath()), 10e-6);
+ }
+
+ @Test
public void testIgnoredWhenRootWildcarded() {
conf.set(getTemplateKey("*", "capacity"), "6w");
AutoCreatedQueueTemplate template =