YARN-2827. Fixed bugs in "yarn queue" CLI. Contributed by Wangda Tan.
This commit is contained in:
parent
d5d2905262
commit
7b19079657
|
@ -871,6 +871,8 @@ Release 2.6.0 - UNRELEASED
|
||||||
not mapped to queues by making default capacities per label to be zero.
|
not mapped to queues by making default capacities per label to be zero.
|
||||||
(Wangda Tan via vinodkv)
|
(Wangda Tan via vinodkv)
|
||||||
|
|
||||||
|
YARN-2827. Fixed bugs in "yarn queue" CLI. (Wangda Tan via vinodkv).
|
||||||
|
|
||||||
Release 2.5.2 - UNRELEASED
|
Release 2.5.2 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -215,7 +215,7 @@ elif [ "$COMMAND" = "application" ] ||
|
||||||
elif [ "$COMMAND" = "node" ] ; then
|
elif [ "$COMMAND" = "node" ] ; then
|
||||||
CLASS=org.apache.hadoop.yarn.client.cli.NodeCLI
|
CLASS=org.apache.hadoop.yarn.client.cli.NodeCLI
|
||||||
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
|
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
|
||||||
elif [ "COMMAND" = "queue" ] ; then
|
elif [ "$COMMAND" = "queue" ] ; then
|
||||||
CLASS=org.apache.hadoop.yarn.client.cli.QueueCLI
|
CLASS=org.apache.hadoop.yarn.client.cli.QueueCLI
|
||||||
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
|
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
|
||||||
elif [ "$COMMAND" = "resourcemanager" ] ; then
|
elif [ "$COMMAND" = "resourcemanager" ] ; then
|
||||||
|
|
|
@ -52,16 +52,11 @@ public class QueueCLI extends YarnCLI {
|
||||||
@Override
|
@Override
|
||||||
public int run(String[] args) throws Exception {
|
public int run(String[] args) throws Exception {
|
||||||
Options opts = new Options();
|
Options opts = new Options();
|
||||||
int exitCode = -1;
|
|
||||||
if (args.length > 0) {
|
|
||||||
opts.addOption(STATUS_CMD, true,
|
opts.addOption(STATUS_CMD, true,
|
||||||
"List queue information about given queue.");
|
"List queue information about given queue.");
|
||||||
opts.addOption(HELP_CMD, false, "Displays help for all commands.");
|
opts.addOption(HELP_CMD, false, "Displays help for all commands.");
|
||||||
opts.getOption(STATUS_CMD).setArgName("Queue Name");
|
opts.getOption(STATUS_CMD).setArgName("Queue Name");
|
||||||
} else {
|
|
||||||
syserr.println("Invalid Command usage. Command must start with 'queue'");
|
|
||||||
return exitCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
CommandLine cliParser = null;
|
CommandLine cliParser = null;
|
||||||
try {
|
try {
|
||||||
|
@ -69,23 +64,23 @@ public class QueueCLI extends YarnCLI {
|
||||||
} catch (MissingArgumentException ex) {
|
} catch (MissingArgumentException ex) {
|
||||||
sysout.println("Missing argument for options");
|
sysout.println("Missing argument for options");
|
||||||
printUsage(opts);
|
printUsage(opts);
|
||||||
return exitCode;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cliParser.hasOption(STATUS_CMD)) {
|
if (cliParser.hasOption(STATUS_CMD)) {
|
||||||
if (args.length != 3) {
|
if (args.length != 2) {
|
||||||
printUsage(opts);
|
printUsage(opts);
|
||||||
return exitCode;
|
return -1;
|
||||||
}
|
}
|
||||||
listQueue(cliParser.getOptionValue(STATUS_CMD));
|
return listQueue(cliParser.getOptionValue(STATUS_CMD));
|
||||||
} else if (cliParser.hasOption(HELP_CMD)) {
|
} else if (cliParser.hasOption(HELP_CMD)) {
|
||||||
printUsage(opts);
|
printUsage(opts);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
syserr.println("Invalid Command Usage : ");
|
syserr.println("Invalid Command Usage : ");
|
||||||
printUsage(opts);
|
printUsage(opts);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,13 +100,22 @@ public class QueueCLI extends YarnCLI {
|
||||||
* @throws YarnException
|
* @throws YarnException
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
private void listQueue(String queueName) throws YarnException, IOException {
|
private int listQueue(String queueName) throws YarnException, IOException {
|
||||||
|
int rc;
|
||||||
PrintWriter writer = new PrintWriter(sysout);
|
PrintWriter writer = new PrintWriter(sysout);
|
||||||
|
|
||||||
QueueInfo queueInfo = client.getQueueInfo(queueName);
|
QueueInfo queueInfo = client.getQueueInfo(queueName);
|
||||||
|
if (queueInfo != null) {
|
||||||
writer.println("Queue Information : ");
|
writer.println("Queue Information : ");
|
||||||
printQueueInfo(writer, queueInfo);
|
printQueueInfo(writer, queueInfo);
|
||||||
|
rc = 0;
|
||||||
|
} else {
|
||||||
|
writer.println("Cannot get queue from RM by queueName = " + queueName
|
||||||
|
+ ", please check.");
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
writer.flush();
|
writer.flush();
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) {
|
private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) {
|
||||||
|
|
|
@ -1247,7 +1247,7 @@ public class TestYarnCLI {
|
||||||
QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
|
QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
|
||||||
null, null, QueueState.RUNNING, nodeLabels, "GPU");
|
null, null, QueueState.RUNNING, nodeLabels, "GPU");
|
||||||
when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
|
when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
|
||||||
int result = cli.run(new String[] { "queue", "-status", "queueA" });
|
int result = cli.run(new String[] { "-status", "queueA" });
|
||||||
assertEquals(0, result);
|
assertEquals(0, result);
|
||||||
verify(client).getQueueInfo("queueA");
|
verify(client).getQueueInfo("queueA");
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
@ -1271,7 +1271,7 @@ public class TestYarnCLI {
|
||||||
QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
|
QueueInfo queueInfo = QueueInfo.newInstance("queueA", 0.4f, 0.8f, 0.5f,
|
||||||
null, null, QueueState.RUNNING, null, null);
|
null, null, QueueState.RUNNING, null, null);
|
||||||
when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
|
when(client.getQueueInfo(any(String.class))).thenReturn(queueInfo);
|
||||||
int result = cli.run(new String[] { "queue", "-status", "queueA" });
|
int result = cli.run(new String[] { "-status", "queueA" });
|
||||||
assertEquals(0, result);
|
assertEquals(0, result);
|
||||||
verify(client).getQueueInfo("queueA");
|
verify(client).getQueueInfo("queueA");
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
@ -1289,6 +1289,23 @@ public class TestYarnCLI {
|
||||||
Assert.assertEquals(queueInfoStr, sysOutStream.toString());
|
Assert.assertEquals(queueInfoStr, sysOutStream.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetQueueInfoWithNonExistedQueue() throws Exception {
|
||||||
|
String queueName = "non-existed-queue";
|
||||||
|
QueueCLI cli = createAndGetQueueCLI();
|
||||||
|
when(client.getQueueInfo(any(String.class))).thenReturn(null);
|
||||||
|
int result = cli.run(new String[] { "-status", queueName });
|
||||||
|
assertEquals(-1, result);;
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
PrintWriter pw = new PrintWriter(baos);
|
||||||
|
pw.println("Cannot get queue from RM by queueName = " + queueName
|
||||||
|
+ ", please check.");
|
||||||
|
pw.close();
|
||||||
|
String queueInfoStr = baos.toString("UTF-8");
|
||||||
|
Assert.assertEquals(queueInfoStr, sysOutStream.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void verifyUsageInfo(YarnCLI cli) throws Exception {
|
private void verifyUsageInfo(YarnCLI cli) throws Exception {
|
||||||
cli.setSysErrPrintStream(sysErr);
|
cli.setSysErrPrintStream(sysErr);
|
||||||
cli.run(new String[] { "application" });
|
cli.run(new String[] { "application" });
|
||||||
|
|
Loading…
Reference in New Issue