diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java index 7816feb..3744e09 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueInfo.java @@ -25,7 +25,6 @@ import org.apache.hadoop.classification.InterfaceAudience.Public; import org.apache.hadoop.classification.InterfaceStability.Stable; import org.apache.hadoop.classification.InterfaceStability.Unstable; -import org.apache.hadoop.yarn.api.ApplicationClientProtocol; import org.apache.hadoop.yarn.util.Records; /** @@ -40,6 +39,7 @@ *
  • Child queues.
  • *
  • Running applications.
  • *
  • {@link QueueState} of the queue.
  • + *
  • Maximum AM limit of the queue.
  • * * * @see QueueState @@ -72,6 +72,24 @@ public static QueueInfo newInstance(String queueName, float capacity, return queueInfo; } + @Private + @Unstable + public static QueueInfo newInstance(String queueName, float capacity, + float maximumCapacity, float currentCapacity, + List childQueues, List applications, + QueueState queueState, Set accessibleNodeLabels, + String defaultNodeLabelExpression, QueueStatistics queueStatistics, + boolean preemptionDisabled, float maxAMLimitPercentage) { + QueueInfo queueInfo = QueueInfo.newInstance(queueName, capacity, + maximumCapacity, currentCapacity, + childQueues, applications, + queueState, accessibleNodeLabels, + defaultNodeLabelExpression, queueStatistics, + preemptionDisabled); + queueInfo.setMaxAMLimitPercentage(maxAMLimitPercentage); + return queueInfo; + } + /** * Get the name of the queue. * @return name of the queue @@ -189,7 +207,7 @@ public abstract void setDefaultNodeLabelExpression( String defaultLabelExpression); /** - * Get the queue stats for the queue + * Get the queue stats for the queue. * * @return queue stats of the queue */ @@ -198,7 +216,7 @@ public abstract void setDefaultNodeLabelExpression( public abstract QueueStatistics getQueueStatistics(); /** - * Set the queue statistics for the queue + * Set the queue statistics for the queue. * * @param queueStatistics * the queue statistics @@ -219,4 +237,16 @@ public abstract void setDefaultNodeLabelExpression( @Private @Unstable public abstract void setPreemptionDisabled(boolean preemptionDisabled); + + /** + * Get the maxAMLimitPercentage of the queue. + * @return maxAMLimitPercentage of the queue + */ + @Public + @Stable + public abstract float getMaxAMLimitPercentage(); + + @Private + @Unstable + public abstract void setMaxAMLimitPercentage(float maxAMLimitPercentage); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto index a6dbf3c..44b1bfe 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto @@ -463,6 +463,7 @@ message QueueInfoProto { optional string defaultNodeLabelExpression = 9; optional QueueStatisticsProto queueStatistics = 10; optional bool preemptionDisabled = 11; + optional float maxAMLimitPercentage = 12; } enum QueueACLProto { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java index 330b081..b3e017b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/QueueCLI.java @@ -158,5 +158,8 @@ private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) { writer.print("\tPreemption : "); writer.println(preemptStatus ? "disabled" : "enabled"); } + + writer.print("\tMax AM Limit Percentage : "); + writer.println(df.format(queueInfo.getMaxAMLimitPercentage() * 100) + "%"); } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java index 7cf9788..4537d76 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java @@ -1699,7 +1699,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, QueueState.RUNNING, nodeLabels, "GPU", null, false, 0.1f); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); int result = cli.run(new String[] { "-status", "queueA" }); assertEquals(0, result); @@ -1715,6 +1715,7 @@ public void testGetQueueInfo() throws Exception { pw.println("\tDefault Node Label expression : " + "GPU"); pw.println("\tAccessible Node Labels : " + "JDK_7,GPU"); pw.println("\tPreemption : " + "enabled"); + pw.println("\tMax AM Limit Percentage : " + "10.0%"); pw.close(); String queueInfoStr = baos.toString("UTF-8"); Assert.assertEquals(queueInfoStr, sysOutStream.toString()); @@ -1800,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, QueueState.RUNNING, null, null, null, true, 0.1f); when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo); int result = cli.run(new String[] { "-status", "queueA" }); assertEquals(0, result); @@ -1817,6 +1818,7 @@ public void testGetQueueInfoWithEmptyNodeLabel() throws Exception { + NodeLabel.DEFAULT_NODE_LABEL_PARTITION); pw.println("\tAccessible Node Labels : "); pw.println("\tPreemption : " + "disabled"); + pw.println("\tMax AM Limit Percentage : " + "10.0%"); pw.close(); String queueInfoStr = baos.toString("UTF-8"); Assert.assertEquals(queueInfoStr, sysOutStream.toString()); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java index 605cab1..f41034f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java @@ -53,7 +53,7 @@ public QueueInfoPBImpl() { builder = QueueInfoProto.newBuilder(); } - + public QueueInfoPBImpl(QueueInfoProto proto) { this.proto = proto; viaProto = true; @@ -408,4 +408,15 @@ public void setPreemptionDisabled(boolean preemptionDisabled) { maybeInitBuilder(); builder.setPreemptionDisabled(preemptionDisabled); } + + public float getMaxAMLimitPercentage() { + QueueInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasMaxAMLimitPercentage()) ? p.getMaxAMLimitPercentage() : -1; + } + + @Override + public void setMaxAMLimitPercentage(float maxAMLimitPercentage) { + maybeInitBuilder(); + builder.setMaxAMLimitPercentage(maxAMLimitPercentage); + } } 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/AbstractCSQueue.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/AbstractCSQueue.java index e9ef319..69dc93a 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/AbstractCSQueue.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/AbstractCSQueue.java @@ -411,6 +411,7 @@ protected QueueInfo getQueueInfo() { queueInfo.setCurrentCapacity(getUsedCapacity()); queueInfo.setQueueStatistics(getQueueStatistics()); queueInfo.setPreemptionDisabled(preemptionDisabled); + queueInfo.setMaxAMLimitPercentage(queueCapacities.getMaxAMResourcePercentage()); return queueInfo; }