YARN-8465. Fixed docker container status for node manager restart.

Contributed by Shane Kumpf
This commit is contained in:
Eric Yang 2018-07-02 13:37:51 -04:00
parent fef20a446f
commit 5cc2541a16
3 changed files with 16 additions and 4 deletions

View File

@ -1027,7 +1027,6 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
handleContainerKill(ctx, env, signal); handleContainerKill(ctx, env, signal);
} }
} catch (ContainerExecutionException e) { } catch (ContainerExecutionException e) {
LOG.warn("Signal docker container failed. Exception: ", e);
throw new ContainerExecutionException("Signal docker container failed", throw new ContainerExecutionException("Signal docker container failed",
e.getExitCode(), e.getOutput(), e.getErrorOutput()); e.getExitCode(), e.getOutput(), e.getErrorOutput());
} }
@ -1201,7 +1200,8 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
if (!new File(procFs + File.separator + pid).exists()) { if (!new File(procFs + File.separator + pid).exists()) {
String msg = "Liveliness check failed for PID: " + pid String msg = "Liveliness check failed for PID: " + pid
+ ". Container may have already completed."; + ". Container may have already completed.";
throw new ContainerExecutionException(msg); throw new ContainerExecutionException(msg,
PrivilegedOperation.ResultCode.INVALID_CONTAINER_PID.getValue());
} }
} }

View File

@ -53,6 +53,12 @@ public class ContainerExecutionException extends YarnException {
errorOutput = OUTPUT_UNSET; errorOutput = OUTPUT_UNSET;
} }
public ContainerExecutionException(String message, int exitCode) {
super(message);
this.exitCode = exitCode;
this.output = OUTPUT_UNSET;
this.errorOutput = OUTPUT_UNSET;
}
public ContainerExecutionException(String message, int exitCode, String public ContainerExecutionException(String message, int exitCode, String
output, String errorOutput) { output, String errorOutput) {

View File

@ -1492,7 +1492,7 @@ public class TestDockerContainerRuntime {
runtime.signalContainer(builder.build()); runtime.signalContainer(builder.build());
} }
@Test(expected = ContainerExecutionException.class) @Test
public void testContainerLivelinessNoFileException() throws Exception { public void testContainerLivelinessNoFileException() throws Exception {
DockerLinuxContainerRuntime runtime = new DockerLinuxContainerRuntime( DockerLinuxContainerRuntime runtime = new DockerLinuxContainerRuntime(
mockExecutor, mockCGroupsHandler); mockExecutor, mockCGroupsHandler);
@ -1501,7 +1501,13 @@ public class TestDockerContainerRuntime {
.setExecutionAttribute(PID, signalPid) .setExecutionAttribute(PID, signalPid)
.setExecutionAttribute(SIGNAL, ContainerExecutor.Signal.NULL); .setExecutionAttribute(SIGNAL, ContainerExecutor.Signal.NULL);
runtime.initialize(enableMockContainerExecutor(conf), null); runtime.initialize(enableMockContainerExecutor(conf), null);
runtime.signalContainer(builder.build()); try {
runtime.signalContainer(builder.build());
} catch (ContainerExecutionException e) {
Assert.assertEquals(
PrivilegedOperation.ResultCode.INVALID_CONTAINER_PID.getValue(),
e.getExitCode());
}
} }
@Test @Test