|
@@ -744,14 +744,6 @@ public class TestYarnCLI {
|
|
|
Assert.assertEquals(createApplicationCLIHelpMessage(),
|
|
|
sysOutStream.toString());
|
|
|
|
|
|
- sysOutStream.reset();
|
|
|
- ApplicationId applicationId = ApplicationId.newInstance(1234, 5);
|
|
|
- result = cli.run(
|
|
|
- new String[] {"application", "-kill", applicationId.toString(), "args" });
|
|
|
- verify(spyCli).printUsage(any(String.class), any(Options.class));
|
|
|
- Assert.assertEquals(createApplicationCLIHelpMessage(),
|
|
|
- sysOutStream.toString());
|
|
|
-
|
|
|
sysOutStream.reset();
|
|
|
NodeId nodeId = NodeId.newInstance("host0", 0);
|
|
|
result = cli.run(
|
|
@@ -878,7 +870,134 @@ public class TestYarnCLI {
|
|
|
Assert.fail("Unexpected exception: " + e);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testKillApplications() throws Exception {
|
|
|
+ ApplicationCLI cli = createAndGetAppCLI();
|
|
|
+ ApplicationId applicationId1 = ApplicationId.newInstance(1234, 5);
|
|
|
+ ApplicationId applicationId2 = ApplicationId.newInstance(1234, 6);
|
|
|
+ ApplicationId applicationId3 = ApplicationId.newInstance(1234, 7);
|
|
|
+ ApplicationId applicationId4 = ApplicationId.newInstance(1234, 8);
|
|
|
+
|
|
|
+ // Test Scenario 1: Both applications are FINISHED.
|
|
|
+ ApplicationReport newApplicationReport1 = ApplicationReport.newInstance(
|
|
|
+ applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
|
|
+ ApplicationReport newApplicationReport2 = ApplicationReport.newInstance(
|
|
|
+ applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.34344f, "YARN", null);
|
|
|
+ when(client.getApplicationReport(applicationId1)).thenReturn(
|
|
|
+ newApplicationReport1);
|
|
|
+ when(client.getApplicationReport(applicationId2)).thenReturn(
|
|
|
+ newApplicationReport2);
|
|
|
+ int result = cli.run(new String[]{"application", "-kill",
|
|
|
+ applicationId1.toString() + " " + applicationId2.toString()});
|
|
|
+ assertEquals(0, result);
|
|
|
+ verify(client, times(0)).killApplication(applicationId1);
|
|
|
+ verify(client, times(0)).killApplication(applicationId2);
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Application " + applicationId1 + " has already finished ");
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Application " + applicationId2 + " has already finished ");
|
|
|
+
|
|
|
+ // Test Scenario 2: Both applications are RUNNING.
|
|
|
+ ApplicationReport newApplicationReport3 = ApplicationReport.newInstance(
|
|
|
+ applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
|
|
+ ApplicationReport newApplicationReport4 = ApplicationReport.newInstance(
|
|
|
+ applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
|
|
+ when(client.getApplicationReport(applicationId1)).thenReturn(
|
|
|
+ newApplicationReport3);
|
|
|
+ when(client.getApplicationReport(applicationId2)).thenReturn(
|
|
|
+ newApplicationReport4);
|
|
|
+ result = cli.run(new String[]{"application", "-kill",
|
|
|
+ applicationId1.toString() + " " + applicationId2.toString()});
|
|
|
+ assertEquals(0, result);
|
|
|
+ verify(client).killApplication(applicationId1);
|
|
|
+ verify(client).killApplication(applicationId2);
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Killing application application_1234_0005");
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Killing application application_1234_0006");
|
|
|
+
|
|
|
+ // Test Scenario 3: Both applications are not present.
|
|
|
+ doThrow(new ApplicationNotFoundException("Application with id '"
|
|
|
+ + applicationId3 + "' doesn't exist in RM.")).when(client)
|
|
|
+ .getApplicationReport(applicationId3);
|
|
|
+ doThrow(new ApplicationNotFoundException("Application with id '"
|
|
|
+ + applicationId4 + "' doesn't exist in RM.")).when(client)
|
|
|
+ .getApplicationReport(applicationId4);
|
|
|
+ result = cli.run(new String[]{"application", "-kill",
|
|
|
+ applicationId3.toString() + " " + applicationId4.toString()});
|
|
|
+ Assert.assertNotEquals(0, result);
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Application with id 'application_1234_0007' doesn't exist in RM.");
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Application with id 'application_1234_0008' doesn't exist in RM.");
|
|
|
+
|
|
|
+ // Test Scenario 4: one application is not present and other RUNNING
|
|
|
+ doThrow(new ApplicationNotFoundException("Application with id '"
|
|
|
+ + applicationId3 + "' doesn't exist in RM.")).when(client)
|
|
|
+ .getApplicationReport(applicationId3);
|
|
|
+ ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
|
|
|
+ applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
|
|
+ when(client.getApplicationReport(applicationId1)).thenReturn(
|
|
|
+ newApplicationReport5);
|
|
|
+ result = cli.run(new String[]{"application", "-kill",
|
|
|
+ applicationId3.toString() + " " + applicationId1.toString()});
|
|
|
+ Assert.assertEquals(0, result);
|
|
|
+
|
|
|
+ // Test Scenario 5: kill operation with some other command.
|
|
|
+ sysOutStream.reset();
|
|
|
+ result = cli.run(new String[]{"application", "--appStates", "RUNNING",
|
|
|
+ "-kill", applicationId3.toString() + " " + applicationId1.toString()});
|
|
|
+ Assert.assertEquals(-1, result);
|
|
|
+ Assert.assertEquals(createApplicationCLIHelpMessage(),
|
|
|
+ sysOutStream.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testKillApplicationsOfDifferentEndStates() throws Exception {
|
|
|
+ ApplicationCLI cli = createAndGetAppCLI();
|
|
|
+ ApplicationId applicationId1 = ApplicationId.newInstance(1234, 5);
|
|
|
+ ApplicationId applicationId2 = ApplicationId.newInstance(1234, 6);
|
|
|
+
|
|
|
+ // Scenario: One application is FINISHED and other is RUNNING.
|
|
|
+ ApplicationReport newApplicationReport5 = ApplicationReport.newInstance(
|
|
|
+ applicationId1, ApplicationAttemptId.newInstance(applicationId1, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53789f, "YARN", null);
|
|
|
+ ApplicationReport newApplicationReport6 = ApplicationReport.newInstance(
|
|
|
+ applicationId2, ApplicationAttemptId.newInstance(applicationId2, 1),
|
|
|
+ "user", "queue", "appname", "host", 124, null,
|
|
|
+ YarnApplicationState.RUNNING, "diagnostics", "url", 0, 0,
|
|
|
+ FinalApplicationStatus.SUCCEEDED, null, "N/A", 0.53345f, "YARN", null);
|
|
|
+ when(client.getApplicationReport(applicationId1)).thenReturn(
|
|
|
+ newApplicationReport5);
|
|
|
+ when(client.getApplicationReport(applicationId2)).thenReturn(
|
|
|
+ newApplicationReport6);
|
|
|
+ int result = cli.run(new String[]{"application", "-kill",
|
|
|
+ applicationId1.toString() + " " + applicationId2.toString()});
|
|
|
+ assertEquals(0, result);
|
|
|
+ verify(client, times(1)).killApplication(applicationId2);
|
|
|
+ verify(sysOut).println(
|
|
|
+ "Application " + applicationId1 + " has already finished ");
|
|
|
+ verify(sysOut).println("Killing application application_1234_0006");
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testMoveApplicationAcrossQueues() throws Exception {
|
|
|
ApplicationCLI cli = createAndGetAppCLI();
|
|
@@ -1694,7 +1813,9 @@ public class TestYarnCLI {
|
|
|
pw.println(" based on input comma-separated list of");
|
|
|
pw.println(" application types.");
|
|
|
pw.println(" -help Displays help for all commands.");
|
|
|
- pw.println(" -kill <Application ID> Kills the application.");
|
|
|
+ pw.println(" -kill <Application ID> Kills the application. Set of");
|
|
|
+ pw.println(" applications can be provided separated");
|
|
|
+ pw.println(" with space");
|
|
|
pw.println(" -list List applications. Supports optional use");
|
|
|
pw.println(" of -appTypes to filter applications based");
|
|
|
pw.println(" on application type, and -appStates to");
|