diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java index 897b44267f1..9c1f4ec0535 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java @@ -59,7 +59,7 @@ public static QueueInfo newInstance(String queueName, float capacity, List childQueues, List applications, QueueState queueState, Set accessibleNodeLabels, String defaultNodeLabelExpression, QueueStatistics queueStatistics, - boolean preemptionDisabled) { + boolean preemptionDisabled, boolean disabled) { QueueInfo queueInfo = Records.newRecord(QueueInfo.class); queueInfo.setQueueName(queueName); queueInfo.setCapacity(capacity); @@ -72,6 +72,7 @@ public static QueueInfo newInstance(String queueName, float capacity, queueInfo.setDefaultNodeLabelExpression(defaultNodeLabelExpression); queueInfo.setQueueStatistics(queueStatistics); queueInfo.setPreemptionDisabled(preemptionDisabled); + queueInfo.setDisabled(disabled); return queueInfo; } @@ -82,14 +83,14 @@ public static QueueInfo newInstance(String queueName, float capacity, List childQueues, List applications, QueueState queueState, Set accessibleNodeLabels, String defaultNodeLabelExpression, QueueStatistics queueStatistics, - boolean preemptionDisabled, + boolean preemptionDisabled, boolean disabled, Map queueConfigurations) { QueueInfo queueInfo = QueueInfo.newInstance(queueName, capacity, maximumCapacity, currentCapacity, childQueues, applications, queueState, accessibleNodeLabels, defaultNodeLabelExpression, queueStatistics, - preemptionDisabled); + preemptionDisabled, disabled); queueInfo.setQueueConfigurations(queueConfigurations); return queueInfo; } @@ -238,10 +239,18 @@ public abstract void setDefaultNodeLabelExpression( @Stable public abstract Boolean getPreemptionDisabled(); + @Public + @Stable + public abstract Boolean getDisabled(); + @Private @Unstable public abstract void setPreemptionDisabled(boolean preemptionDisabled); + @Private + @Unstable + public abstract void setDisabled(boolean disabled); + /** * Get the per-node-label queue configurations of the queue. * diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java index 330b081c73a..5b390d04450 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java @@ -158,5 +158,10 @@ private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) { writer.print("\tPreemption : "); writer.println(preemptStatus ? "disabled" : "enabled"); } + Boolean isDisabled = queueInfo.getDisabled(); + if (isDisabled) { + writer.print("\tState : "); + writer.println(isDisabled ? "disabled" : "enabled"); + } } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index 13730f1c830..530f25aab1e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -1700,7 +1700,7 @@ public void testGetQueueInfo() throws Exception { nodeLabels.add("GPU"); nodeLabels.add("JDK_7"); QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f, - null, null, QueueState.RUNNING, nodeLabels, "GPU", null, false, null); + null, null, QueueState.RUNNING, nodeLabels, "GPU", null, false, true, null); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); int result = cli.run(new String[] { "-status", "queueA" }); assertEquals(0, result); @@ -1801,7 +1801,7 @@ public void testGetQueueInfoPreemptionDisabled() throws Exception { public void testGetQueueInfoWithEmptyNodeLabel() throws Exception { QueueCLI cli = createAndGetQueueCLI(); QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f, - null, null, QueueState.RUNNING, null, null, null, true, null); + null, null, QueueState.RUNNING, null, null, null, true, true, null); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); int result = cli.run(new String[] { "-status", "queueA" }); assertEquals(0, result); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationConfiguration.java index 71e6f7fd7df..0e88c419b69 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationConfiguration.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationConfiguration.java @@ -108,6 +108,7 @@ private ReservationQueueConfiguration globalReservationQueueConfig; private final Set nonPreemptableQueues; + private final Set disabledQueues; public AllocationConfiguration(Map minQueueResources, Map maxQueueResources, @@ -127,8 +128,8 @@ public AllocationConfiguration(Map minQueueResources, QueuePlacementPolicy placementPolicy, Map> configuredQueues, ReservationQueueConfiguration globalReservationQueueConfig, - Set reservableQueues, - Set nonPreemptableQueues) { + Set reservableQueues, Set nonPreemptableQueues, + Set disabledQueues) { this.minQueueResources = minQueueResources; this.maxQueueResources = maxQueueResources; this.maxChildQueueResources = maxChildQueueResources; @@ -152,8 +153,9 @@ public AllocationConfiguration(Map minQueueResources, this.placementPolicy = placementPolicy; this.configuredQueues = configuredQueues; this.nonPreemptableQueues = nonPreemptableQueues; + this.disabledQueues = disabledQueues; } - + public AllocationConfiguration(Configuration conf) { minQueueResources = new HashMap<>(); maxChildQueueResources = new HashMap<>(); @@ -181,8 +183,9 @@ public AllocationConfiguration(Configuration conf) { placementPolicy = QueuePlacementPolicy.fromConfiguration(conf, configuredQueues); nonPreemptableQueues = new HashSet<>(); + disabledQueues = new HashSet<>(); } - + /** * Get the ACLs associated with this queue. If a given ACL is not explicitly * configured, include the default value for that ACL. The default for the @@ -253,6 +256,10 @@ public boolean isPreemptable(String queueName) { return !nonPreemptableQueues.contains(queueName); } + public boolean isDisabled(String queueName) { + return disabledQueues.contains(queueName); + } + private ResourceWeights getQueueWeight(String queue) { ResourceWeights weight = queueWeights.get(queue); return (weight == null) ? ResourceWeights.NEUTRAL : weight; @@ -341,6 +348,10 @@ public QueuePlacementPolicy getPlacementPolicy() { return placementPolicy; } + public Set getDisabledQueues() { + return disabledQueues; + } + @Override public boolean isReservable(String queue) { return reservableQueues.contains(queue); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java index 313a27ae378..93b915d1968 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java @@ -60,6 +60,8 @@ import com.google.common.annotations.VisibleForTesting; +import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerConfiguration.parseQueueStateConfigValue; + @Public @Unstable public class AllocationFileLoaderService extends AbstractService { @@ -243,6 +245,7 @@ public synchronized void reloadAllocations() throws IOException, new HashMap<>(); Set reservableQueues = new HashSet<>(); Set nonPreemptableQueues = new HashSet<>(); + Set disabledQueues = new HashSet<>(); int userMaxAppsDefault = Integer.MAX_VALUE; int queueMaxAppsDefault = Integer.MAX_VALUE; Resource queueMaxResourcesDefault = Resources.unbounded(); @@ -386,7 +389,7 @@ public synchronized void reloadAllocations() throws IOException, queueWeights, queuePolicies, minSharePreemptionTimeouts, fairSharePreemptionTimeouts, fairSharePreemptionThresholds, queueAcls, reservationAcls, configuredQueues, reservableQueues, - nonPreemptableQueues); + nonPreemptableQueues, disabledQueues); } // Load placement policy and pass it configured queues @@ -436,8 +439,9 @@ public synchronized void reloadAllocations() throws IOException, defaultSchedPolicy, minSharePreemptionTimeouts, fairSharePreemptionTimeouts, fairSharePreemptionThresholds, queueAcls, reservationAcls, newPlacementPolicy, configuredQueues, - globalReservationQueueConfig, reservableQueues, nonPreemptableQueues); - + globalReservationQueueConfig, reservableQueues, + nonPreemptableQueues, disabledQueues); + lastSuccessfulReload = clock.getTime(); lastReloadAttemptFailed = false; @@ -462,8 +466,8 @@ private void loadQueue(String parentName, Element element, Map> queueAcls, Map> resAcls, Map> configuredQueues, - Set reservableQueues, - Set nonPreemptableQueues) + Set reservableQueues, Set nonPreemptableQueues, + Set disabledQueues) throws AllocationConfigurationException { String queueName = FairSchedulerUtilities.trimQueueName( element.getAttribute("name")); @@ -523,6 +527,13 @@ private void loadQueue(String parentName, Element element, String text = ((Text)field.getFirstChild()).getData().trim(); double val = Double.parseDouble(text); queueWeights.put(queueName, new ResourceWeights((float)val)); + } else if ("state".equals(field.getTagName())) { + String text = ((Text)field.getFirstChild()).getData().trim(); + FairSchedulerConfiguration.QueueState state = + parseQueueStateConfigValue(text); + if (state.equals(FairSchedulerConfiguration.QueueState.DISABLED)) { + disabledQueues.add(queueName); + } } else if ("minSharePreemptionTimeout".equals(field.getTagName())) { String text = ((Text)field.getFirstChild()).getData().trim(); long val = Long.parseLong(text) * 1000L; @@ -575,7 +586,7 @@ private void loadQueue(String parentName, Element element, queueWeights, queuePolicies, minSharePreemptionTimeouts, fairSharePreemptionTimeouts, fairSharePreemptionThresholds, queueAcls, resAcls, configuredQueues, reservableQueues, - nonPreemptableQueues); + nonPreemptableQueues, disabledQueues); isLeaf = false; } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSLeafQueue.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSLeafQueue.java index b911a1ae71a..c28a51d5d3a 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSLeafQueue.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSLeafQueue.java @@ -620,6 +620,7 @@ protected void dumpStateInternal(StringBuilder sb) { sb.append("{Name: " + getName() + ", Weight: " + weights + ", Policy: " + policy.getName() + + ", State: " + (isDisabled() ? "Disabled" : "Enabled") + ", FairShare: " + getFairShare() + ", SteadyFairShare: " + getSteadyFairShare() + ", MaxShare: " + maxShare + diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java index 5b4e4dc9e5e..a2d42a4c6f0 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSParentQueue.java @@ -298,6 +298,7 @@ protected void dumpStateInternal(StringBuilder sb) { sb.append("{Name: " + getName() + ", Weight: " + weights + ", Policy: " + policy.getName() + + ", State: " + (isDisabled() ? "Disabled" : "Enabled") + ", FairShare: " + getFairShare() + ", SteadyFairShare: " + getSteadyFairShare() + ", MaxShare: " + maxShare + diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java index 10168232a94..a95dfbfdd03 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSQueue.java @@ -83,6 +83,7 @@ private long minSharePreemptionTimeout = Long.MAX_VALUE; private float fairSharePreemptionThreshold = 0.5f; private boolean preemptable = true; + private boolean disabled = false; public FSQueue(String name, FairScheduler scheduler, FSParentQueue parent) { this.name = name; @@ -331,6 +332,14 @@ public boolean isPreemptable() { return preemptable; } + public boolean isDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + /** * Recomputes the shares for all child queues and applications based on this * queue's current share. @@ -410,7 +419,13 @@ public abstract void collectSchedulerApplications( * @return true if check passes (can assign) or false otherwise */ boolean assignContainerPreCheck(FSSchedulerNode node) { - if (node.getReservedContainer() != null) { + if (isDisabled()) { + if (LOG.isDebugEnabled()) { + LOG.debug("Assigning container failed on node '" + node.getNodeName() + + " because queue is disabled."); + } + return false; + } else if (node.getReservedContainer() != null) { if (LOG.isDebugEnabled()) { LOG.debug("Assigning container failed on node '" + node.getNodeName() + " because it has reserved containers."); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java index 8e8e37b2dbf..2850900de74 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java @@ -302,6 +302,21 @@ public static Resource parseResourceConfigValue(String val) } } + enum QueueState { + ENABLED, DISABLED + } + + public static QueueState parseQueueStateConfigValue(String val) + throws AllocationConfigurationException { + try { + val = StringUtils.toUpperCase(val); + return QueueState.valueOf(val); + } catch (Exception ex) { + throw new AllocationConfigurationException( + "Error reading resource config", ex); + } + } + public long getUpdateInterval() { return getLong(UPDATE_INTERVAL_MS, DEFAULT_UPDATE_INTERVAL_MS); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestAllocationFileLoaderService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestAllocationFileLoaderService.java index c8b9ad8bdef..6492c2ee861 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestAllocationFileLoaderService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestAllocationFileLoaderService.java @@ -26,6 +26,7 @@ import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Set; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.api.records.QueueACL; @@ -143,7 +144,41 @@ public void testReload() throws Exception { assertTrue(allocConf.getConfiguredQueues().get(FSQueueType.LEAF) .contains("root.queueB")); } - + + @Test + public void testDisabledQueueAllocationFileParsing() throws Exception { + Configuration conf = new Configuration(); + conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE); + AllocationFileLoaderService allocLoader = new AllocationFileLoaderService(); + + PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE)); + out.println(""); + out.println(""); + out.println(""); + out.println("disabled"); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println("disabled"); + out.println(" "); + out.println(" "); + out.println(""); + out.println(""); + out.close(); + + allocLoader.init(conf); + ReloadListener confHolder = new ReloadListener(); + allocLoader.setReloadListener(confHolder); + allocLoader.reloadAllocations(); + AllocationConfiguration queueConf = confHolder.allocConf; + Set disabledQueues = queueConf.getDisabledQueues(); + assertTrue(disabledQueues.contains("root.queueA")); + assertFalse(disabledQueues.contains("root.queueB")); + assertTrue(disabledQueues.contains("root.queueC")); + assertFalse(disabledQueues.contains("root.queueC.queueD")); + } + @Test public void testAllocationFileParsing() throws Exception { Configuration conf = new Configuration(); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java index 941c215df4c..19bd4ddace5 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java @@ -5238,6 +5238,84 @@ public void testUpdateDemand() throws IOException { Resources.equals(bQueue.getDemand(), maxResource)); } + @Test + public void testQueueState() throws IOException { + conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE); + + PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE)); + out.println(""); + out.println(""); + out.println(""); + out.println(" "); + out.println(" 1"); + out.println(" "); + out.println(" "); + out.println(" disabled"); + out.println(" "); + out.println(""); + out.println(" disabled"); + out.println(" "); + out.println(" 1"); + out.println(" "); + out.println(" "); + out.println(" 1"); + out.println(" disabled"); + out.println(" "); + out.println(""); + out.println(""); + out.close(); + + ControlledClock clock = new ControlledClock(); + scheduler.setClock(clock); + + scheduler.init(conf); + scheduler.start(); + scheduler.reinitialize(conf, resourceManager.getRMContext()); + + FSParentQueue root = + scheduler.getQueueManager().getRootQueue(); + assertFalse(root.isDisabled()); + + assertFalse(scheduler.getQueueManager(). + getParentQueue("parent1", false).isDisabled()); + assertFalse(scheduler.getQueueManager(). + getLeafQueue("parent1.child1", false).isDisabled()); + assertTrue(scheduler.getQueueManager(). + getLeafQueue("parent1.child2", false).isDisabled()); + assertTrue(scheduler.getQueueManager(). + getParentQueue("parent2", false).isDisabled()); + assertFalse(scheduler.getQueueManager(). + getLeafQueue("parent2.child1", false).isDisabled()); + assertTrue(scheduler.getQueueManager(). + getLeafQueue("parent2.child2", false).isDisabled()); + + out = new PrintWriter(new FileWriter(ALLOC_FILE)); + out.println(""); + out.println(""); + out.println(""); + out.println(" disabled"); + out.println(" "); + out.println(" disabled"); + out.println(" 1"); + out.println(" "); + out.println(" "); + out.println(" "); + out.println(""); + out.close(); + scheduler.reinitialize(conf, resourceManager.getRMContext()); + + root = + scheduler.getQueueManager().getRootQueue(); + assertFalse(root.isDisabled()); + + assertTrue(scheduler.getQueueManager(). + getParentQueue("parent1", false).isDisabled()); + assertTrue(scheduler.getQueueManager(). + getLeafQueue("parent1.child1", false).isDisabled()); + assertFalse(scheduler.getQueueManager(). + getLeafQueue("parent1.child2", false).isDisabled()); + } + @Test public void testDumpState() throws IOException { conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE); @@ -5273,6 +5351,7 @@ public void testDumpState() throws IOException { String childQueueString = "{Name: root.parent.child1," + " Weight: ," + " Policy: fair," + + " State: Enabled," + " FairShare: ," + " SteadyFairShare: ," + " MaxShare: ," @@ -5297,6 +5376,7 @@ public void testDumpState() throws IOException { String parentQueueString = "{Name: root.parent," + " Weight: ," + " Policy: fair," + + " State: Enabled," + " FairShare: ," + " SteadyFairShare: ," + " MaxShare: ,"