diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerInfo.java index 548cfe807be..9143817f695 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/CapacitySchedulerInfo.java @@ -58,6 +58,8 @@ public class CapacitySchedulerInfo extends SchedulerInfo { protected String orderingPolicyInfo; protected String mode; protected String queueType; + protected String creationMethod; + protected String autoCreationEligibility; @XmlTransient static final float EPSILON = 1e-8f; @@ -107,6 +109,9 @@ public class CapacitySchedulerInfo extends SchedulerInfo { } mode = CapacitySchedulerInfoHelper.getMode(parent); queueType = CapacitySchedulerInfoHelper.getQueueType(parent); + creationMethod = CapacitySchedulerInfoHelper.getCreationMethod(parent); + autoCreationEligibility = CapacitySchedulerInfoHelper + .getAutoCreationEligibility(parent); } public float getCapacity() { diff --git a/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 b/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 dec666bf949..91265662f87 100644 --- a/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 +++ b/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 @@ -91,6 +91,8 @@ public class CapacitySchedulerQueueInfo { protected LeafQueueTemplateInfo leafQueueTemplate; protected String mode; protected String queueType; + protected String creationMethod; + protected String autoCreationEligibility; CapacitySchedulerQueueInfo() { }; @@ -137,6 +139,9 @@ public class CapacitySchedulerQueueInfo { mode = CapacitySchedulerInfoHelper.getMode(q); queueType = CapacitySchedulerInfoHelper.getQueueType(q); + creationMethod = CapacitySchedulerInfoHelper.getCreationMethod(q); + autoCreationEligibility = CapacitySchedulerInfoHelper + .getAutoCreationEligibility(q); ResourceUsage queueResourceUsage = q.getQueueResourceUsage(); populateQueueResourceUsage(queueResourceUsage); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/helper/CapacitySchedulerInfoHelper.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/helper/CapacitySchedulerInfoHelper.java index 52a5a5cf2a3..355528d7f1b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/helper/CapacitySchedulerInfoHelper.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/helper/CapacitySchedulerInfoHelper.java @@ -18,17 +18,44 @@ package org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.helper; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.AbstractCSQueue; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.AbstractManagedParentQueue; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.AutoCreatedLeafQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.LeafQueue; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ManagedParentQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ParentQueue; +/** + * Helper class to describe a queue's type, its creation method and its + * eligibility of having auto created children. + * + * queueType: a queue can be a parent or a leaf. + * + * creationMethod: the creation method of the queue. Can be: static, + * dynamicLegacy or dynamicFlexible. When the legacy way of queue auto-creation + * (before YARN-10506) is used, a parent can only be static (ManagedParent) + * and a leaf queue can only be dynamicLegacy (no static child queues are + * allowed under ManagedParents). When the flexible auto queue creation is used + * both a parent and a leaf can be either static or dynamicFlexible. + * + * autoCreationEligibility: describes whether a queue can have dynamically + * created children. Can be: off, legacy or flexible. Every leaf will have this + * field with the value off, as they can't have children. When the legacy way + * of queue auto-creation (before YARN-10506) is used a ManagedParent will have + * the legacy value. When the flexible auto queue creation is used a static + * parent can have the value flexible if it is configured to allow auto queue + * creation, or off if it is not. A dynamic parent implicitly will have the + * value flexible, as a dynamically created parent cannot have static children. + */ public class CapacitySchedulerInfoHelper { - private static final String AUTO_CREATED_LEAF = "autoCreatedLeaf"; - private static final String STATIC_LEAF = "staticLeaf"; - private static final String AUTO_CREATED_PARENT = "autoCreatedParent"; - private static final String STATIC_PARENT = "staticParent"; + private static final String PARENT_QUEUE = "parent"; + private static final String LEAF_QUEUE = "leaf"; private static final String UNKNOWN_QUEUE = "unknown"; + private static final String STATIC_QUEUE = "static"; + private static final String LEGACY_DYNAMIC_QUEUE = "dynamicLegacy"; + private static final String FLEXIBLE_DYNAMIC_QUEUE = "dynamicFlexible"; + private static final String AUTO_CREATION_OFF = "off"; + private static final String AUTO_CREATION_LEGACY = "legacy"; + private static final String AUTO_CREATION_FLEXIBLE = "flexible"; private CapacitySchedulerInfoHelper() {} @@ -52,19 +79,31 @@ public class CapacitySchedulerInfoHelper { public static String getQueueType(CSQueue queue) { if (queue instanceof LeafQueue) { - if (((AbstractCSQueue)queue).isDynamicQueue()) { - return AUTO_CREATED_LEAF; - } else { - return STATIC_LEAF; - } + return LEAF_QUEUE; } else if (queue instanceof ParentQueue) { - if (((AbstractCSQueue)queue).isDynamicQueue()) { - return AUTO_CREATED_PARENT; - } else { - //A ParentQueue with isDynamic=false or an AbstractManagedParentQueue - return STATIC_PARENT; - } + return PARENT_QUEUE; } return UNKNOWN_QUEUE; } + + public static String getCreationMethod(CSQueue queue) { + if (queue instanceof AutoCreatedLeafQueue) { + return LEGACY_DYNAMIC_QUEUE; + } else if (((AbstractCSQueue)queue).isDynamicQueue()) { + return FLEXIBLE_DYNAMIC_QUEUE; + } else { + return STATIC_QUEUE; + } + } + + public static String getAutoCreationEligibility(CSQueue queue) { + if (queue instanceof ManagedParentQueue) { + return AUTO_CREATION_LEGACY; + } else if (queue instanceof ParentQueue && + ((ParentQueue)queue).isEligibleForAutoQueueCreation()) { + return AUTO_CREATION_FLEXIBLE; + } else { + return AUTO_CREATION_OFF; + } + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java b/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 61b4df726b0..9ad75d63c98 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java @@ -362,7 +362,7 @@ public class TestRMWebServicesCapacitySched extends JerseyTestBase { JSONObject info = json.getJSONObject("scheduler"); assertEquals("incorrect number of elements in: " + info, 1, info.length()); info = info.getJSONObject("schedulerInfo"); - assertEquals("incorrect number of elements in: " + info, 16, info.length()); + assertEquals("incorrect number of elements in: " + info, 18, info.length()); verifyClusterSchedulerGeneric(info.getString("type"), (float) info.getDouble("usedCapacity"), (float) info.getDouble("capacity"), @@ -413,10 +413,10 @@ public class TestRMWebServicesCapacitySched extends JerseyTestBase { private void verifySubQueue(JSONObject info, String q, float parentAbsCapacity, float parentAbsMaxCapacity) throws JSONException, Exception { - int numExpectedElements = 31; + int numExpectedElements = 33; boolean isParentQueue = true; if (!info.has("queues")) { - numExpectedElements = 49; + numExpectedElements = 51; isParentQueue = false; } assertEquals("incorrect number of elements", numExpectedElements, info.length()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java index 118a0df6271..3ccb967a6bb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java @@ -38,6 +38,8 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.resourcemanager.MockNM; import org.apache.hadoop.yarn.server.resourcemanager.MockRM; +import org.apache.hadoop.yarn.server.resourcemanager.MockRMAppSubmissionData; +import org.apache.hadoop.yarn.server.resourcemanager.MockRMAppSubmitter; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueueUtils; @@ -73,11 +75,14 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends private static final float EXP_ROOT_WEIGHT_IN_WEIGHT_MODE = 1.0F; private static final float EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE = 1.0F; private static final double DELTA = 0.00001; - private static final String STATIC_PARENT = "staticParent"; - private static final String STATIC_LEAF = "staticLeaf"; + private static final String PARENT_QUEUE = "parent"; + private static final String LEAF_QUEUE = "leaf"; + private static final String STATIC_QUEUE = "static"; + private static final String FLEXIBLE_DYNAMIC_QUEUE = "dynamicFlexible"; + private static final String AUTO_CREATION_OFF = "off"; + private static final String AUTO_CREATION_LEGACY = "legacy"; + private static final String AUTO_CREATION_FLEXIBLE = "flexible"; private static final int GB = 1024; - private static final String AUTO_CREATED_LEAF = "autoCreatedLeaf"; - private static final String AUTO_CREATED_PARENT = "autoCreatedParent"; protected static MockRM RM; private CapacitySchedulerAutoQueueHandler autoQueueHandler; @@ -88,13 +93,18 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends public final float weight; public final float normalizedWeight; private String queueType; + private String creationMethod; + private String autoCreationEligibility; public ExpectedQueueWithProperties(String path, float weight, - float normalizedWeight, String queueType) { + float normalizedWeight, String queueType, String creationMethod, + String autoCreationEligibility) { this.path = path; this.weight = weight; this.normalizedWeight = normalizedWeight; this.queueType = queueType; + this.creationMethod = creationMethod; + this.autoCreationEligibility = autoCreationEligibility; } } @@ -161,16 +171,41 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends validateSchedulerInfo(json, "percentage", new ExpectedQueueWithProperties("root", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_PARENT), + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.default", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test1", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test2", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF)); + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF)); + } + + @Test + public void testSchedulerResponsePercentageModeLegacyAutoCreation() + throws Exception { + Configuration config = CSConfigGenerator + .createPercentageConfigLegacyAutoCreation(); + config.set(YarnConfiguration.SCHEDULER_CONFIGURATION_STORE_CLASS, + YarnConfiguration.MEMORY_CONFIGURATION_STORE); + + initResourceManager(config); + JSONObject json = sendRequestToSchedulerEndpoint(); + validateSchedulerInfo(json, "percentage", + new ExpectedQueueWithProperties("root", + EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), + new ExpectedQueueWithProperties("root.default", + EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), + new ExpectedQueueWithProperties("root.test1", + EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), + new ExpectedQueueWithProperties("root.managedtest2", + EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_LEGACY)); } @Test @@ -186,16 +221,16 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends validateSchedulerInfo(json, "absolute", new ExpectedQueueWithProperties("root", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_PARENT), + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.default", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test1", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test2", EXP_WEIGHT_NON_WEIGHT_MODE, EXP_NORM_WEIGHT_NON_WEIGHT_MODE, - STATIC_LEAF)); + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF)); } @Test @@ -211,13 +246,13 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends validateSchedulerInfo(json, "weight", new ExpectedQueueWithProperties("root", EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, - STATIC_PARENT), + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.default", 10.0f, 0.5f, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test1", 4.0f, 0.2f, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test2", 6.0f, 0.3f, - STATIC_LEAF)); + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF)); } @Test @@ -234,13 +269,13 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends validateSchedulerInfo(json, "weight", new ExpectedQueueWithProperties("root", EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, - STATIC_PARENT), + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.default", 10.0f, 0.5f, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test1", 4.0f, 0.2f, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test2", 6.0f, 0.3f, - STATIC_LEAF)); + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF)); //Now create some auto created queues createQueue("root.auto1"); @@ -255,42 +290,42 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends int sumOfWeights = 24; ExpectedQueueWithProperties expectedRootQ = new ExpectedQueueWithProperties("root", - EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, - STATIC_PARENT); + EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, EXP_ROOT_WEIGHT_IN_WEIGHT_MODE, + PARENT_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF); validateSchedulerInfo(json, "weight", expectedRootQ, new ExpectedQueueWithProperties("root.auto1", EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE / sumOfWeights, - AUTO_CREATED_LEAF), + LEAF_QUEUE, FLEXIBLE_DYNAMIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.auto2", EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE / sumOfWeights, - AUTO_CREATED_LEAF), + LEAF_QUEUE, FLEXIBLE_DYNAMIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.auto3", EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE / sumOfWeights, - AUTO_CREATED_LEAF), + LEAF_QUEUE, FLEXIBLE_DYNAMIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.autoParent1", EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE / sumOfWeights, - AUTO_CREATED_PARENT), + PARENT_QUEUE, FLEXIBLE_DYNAMIC_QUEUE, AUTO_CREATION_FLEXIBLE), new ExpectedQueueWithProperties("root.default", 10.0f, 10.0f / sumOfWeights, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test1", 4.0f, 4.0f / sumOfWeights, - STATIC_LEAF), + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF), new ExpectedQueueWithProperties("root.test2", 6.0f, 6.0f / sumOfWeights, - STATIC_LEAF)); + LEAF_QUEUE, STATIC_QUEUE, AUTO_CREATION_OFF)); validateChildrenOfParent(json, "root.autoParent1", "weight", expectedRootQ, new ExpectedQueueWithProperties("root.autoParent1.auto4", EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, EXP_DEFAULT_WEIGHT_IN_WEIGHT_MODE, - AUTO_CREATED_LEAF)); + LEAF_QUEUE, FLEXIBLE_DYNAMIC_QUEUE, AUTO_CREATION_OFF)); } private void initAutoQueueHandler() throws Exception { @@ -433,9 +468,18 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends Float.parseFloat(obj.getString("normalizedWeight")), DELTA); //validate queue creation type - Assert.assertEquals("Queue creation type does not match for queue " + + Assert.assertEquals("Queue type does not match for queue " + queuePath, expectedQueue.queueType, obj.getString("queueType")); + + Assert.assertEquals("Queue creation type does not match for queue " + + queuePath, + expectedQueue.creationMethod, obj.getString("creationMethod")); + + Assert.assertEquals("Queue auto creation eligibility does not " + + "match for queue " + queuePath, + expectedQueue.autoCreationEligibility, + obj.getString("autoCreationEligibility")); } //Validate queue paths and modes @@ -470,6 +514,20 @@ public class TestRMWebServicesCapacitySchedDynamicConfig extends return createConfiguration(conf); } + public static Configuration createPercentageConfigLegacyAutoCreation() { + Map conf = new HashMap<>(); + conf.put("yarn.scheduler.capacity.root.queues", "default, test1, " + + "managedtest2"); + conf.put("yarn.scheduler.capacity.root.test1.capacity", "50"); + conf.put("yarn.scheduler.capacity.root.managedtest2.capacity", "50"); + conf.put("yarn.scheduler.capacity.root.test1.maximum-capacity", "100"); + conf.put("yarn.scheduler.capacity.root.test1.state", "RUNNING"); + conf.put("yarn.scheduler.capacity.root.managedtest2.state", "RUNNING"); + conf.put("yarn.scheduler.capacity.root.managedtest2." + + "auto-create-child-queue.enabled", "true"); + return createConfiguration(conf); + } + public static Configuration createAbsoluteConfig() { Map conf = new HashMap<>(); conf.put("yarn.scheduler.capacity.root.queues", "default, test1, test2"); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java index 7a28c914016..8d9c453731c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java @@ -574,7 +574,7 @@ public class TestRMWebServicesForCSWithPartitions extends JerseyTestBase { JSONObject info = json.getJSONObject("scheduler"); assertEquals("incorrect number of elements", 1, info.length()); info = info.getJSONObject("schedulerInfo"); - assertEquals("incorrect number of elements", 16, info.length()); + assertEquals("incorrect number of elements", 18, info.length()); JSONObject capacitiesJsonObject = info.getJSONObject(CAPACITIES); JSONArray partitionsCapsArray = capacitiesJsonObject.getJSONArray(QUEUE_CAPACITIES_BY_PARTITION);