diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java index 6716dbb02e9..1c94348b59a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java @@ -1543,12 +1543,6 @@ public void transition(ContainerImpl container, ContainerEvent event) { // TODO: Add containerWorkDir to the deletion service. - if (DockerLinuxContainerRuntime.isDockerContainerRequested( - container.daemonConf, - container.getLaunchContext().getEnvironment())) { - removeDockerContainer(container); - } - if (clCleanupRequired) { container.dispatcher.getEventHandler().handle( new ContainersLauncherEvent(container, @@ -1584,12 +1578,6 @@ public void transition(ContainerImpl container, ContainerEvent event) { // TODO: Add containerWorkDir to the deletion service. // TODO: Add containerOuputDir to the deletion service. - if (DockerLinuxContainerRuntime.isDockerContainerRequested( - container.daemonConf, - container.getLaunchContext().getEnvironment())) { - removeDockerContainer(container); - } - if (clCleanupRequired) { container.dispatcher.getEventHandler().handle( new ContainersLauncherEvent(container, @@ -1866,12 +1854,6 @@ public void transition(ContainerImpl container, ContainerEvent event) { container.addDiagnostics(exitEvent.getDiagnosticInfo() + "\n"); } - if (DockerLinuxContainerRuntime.isDockerContainerRequested( - container.daemonConf, - container.getLaunchContext().getEnvironment())) { - removeDockerContainer(container); - } - // The process/process-grp is killed. Decrement reference counts and // cleanup resources container.cleanup(); @@ -2210,14 +2192,6 @@ public ResourceMappings getResourceMappings() { return resourceMappings; } - private static void removeDockerContainer(ContainerImpl container) { - DeletionService deletionService = container.context.getDeletionService(); - DockerContainerDeletionTask deletionTask = - new DockerContainerDeletionTask(deletionService, container.user, - container.getContainerId().toString()); - deletionService.delete(deletionTask); - } - private void storeRetryContext() { if (windowRetryContext.getRestartTimes() != null && !windowRetryContext.getRestartTimes().isEmpty()) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerCleanup.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerCleanup.java index 963d28b54f0..b832c2690be 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerCleanup.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerCleanup.java @@ -29,10 +29,12 @@ import org.apache.hadoop.yarn.event.Dispatcher; import org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor; import org.apache.hadoop.yarn.server.nodemanager.Context; +import org.apache.hadoop.yarn.server.nodemanager.DeletionService; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerDiagnosticsUpdateEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerEventType; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerExitEvent; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.deletion.task.DockerContainerDeletionTask; import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.runtime.DockerLinuxContainerRuntime; import org.apache.hadoop.yarn.server.nodemanager.executor.ContainerReapContext; import org.apache.hadoop.yarn.server.nodemanager.executor.ContainerSignalContext; @@ -145,11 +147,12 @@ public void run() { // Increasing YarnConfiguration.NM_PROCESS_KILL_WAIT_MS // reduces the likelihood of this race condition and process leak. } - // The Docker container may not have fully started, reap the container. - if (DockerLinuxContainerRuntime.isDockerContainerRequested(conf, - container.getLaunchContext().getEnvironment())) { - reapDockerContainerNoPid(user); - } + } + + // rm container in docker + if (DockerLinuxContainerRuntime.isDockerContainerRequested(conf, + container.getLaunchContext().getEnvironment())) { + rmDockerContainerDelayed(container); } } catch (Exception e) { String message = @@ -181,6 +184,14 @@ public void run() { } } + private void rmDockerContainerDelayed(Container container) { + DeletionService deletionService = context.getDeletionService(); + DockerContainerDeletionTask deletionTask = + new DockerContainerDeletionTask(deletionService, container.getUser(), + container.getContainerId().toString()); + deletionService.delete(deletionTask); + } + private void signalProcess(String processId, String user, String containerIdStr) throws IOException { if (LOG.isDebugEnabled()) {