diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index 42f2cae62d0..a15ae86b211 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -1947,6 +1947,20 @@ public static boolean isAclEnabled(Configuration conf) { */ public static final boolean DEFAULT_NM_DOCKER_ALLOW_DELAYED_REMOVAL = false; + /** + * A configurable value to pass to the Docker Stop command. This value + * defines the number of seconds between the docker stop command sending + * a SIGTERM and a SIGKILL. + */ + public static final String NM_DOCKER_STOP_GRACE_PERIOD = + DOCKER_CONTAINER_RUNTIME_PREFIX + "stop.grace-period"; + + /** + * The default value for the grace period between the SIGTERM and the + * SIGKILL in the Docker Stop command. + */ + public static final int DEFAULT_NM_DOCKER_STOP_GRACE_PERIOD = 10; + /** The mode in which the Java Container Sandbox should run detailed by * the JavaSandboxLinuxContainerRuntime. */ public static final String YARN_CONTAINER_SANDBOX = diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml index 81b6658d61e..c4e1e39e537 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml @@ -1787,6 +1787,14 @@ + A configurable value to pass to the Docker Stop command. This value + defines the number of seconds between the docker stop command sending + a SIGTERM and a SIGKILL. + yarn.nodemanager.runtime.linux.docker.stop.grace-period + + + + The mode in which the Java Container Sandbox should run detailed by the JavaSandboxLinuxContainerRuntime. yarn.nodemanager.runtime.linux.sandbox-mode 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/linux/runtime/DockerLinuxContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java index 02904930a97..5705efabd2a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java @@ -245,6 +245,7 @@ private int userRemappingGidThreshold; private Set capabilities; private boolean delayedRemovalAllowed; + private int dockerStopGracePeriod; /** * Return whether the given environment variables indicate that the operation @@ -348,6 +349,10 @@ public void initialize(Configuration conf, Context nmContext) delayedRemovalAllowed = conf.getBoolean( YarnConfiguration.NM_DOCKER_ALLOW_DELAYED_REMOVAL, YarnConfiguration.DEFAULT_NM_DOCKER_ALLOW_DELAYED_REMOVAL); + + dockerStopGracePeriod= conf.getInt( + YarnConfiguration.NM_DOCKER_STOP_GRACE_PERIOD, + YarnConfiguration.DEFAULT_NM_DOCKER_STOP_GRACE_PERIOD); } private Set getDockerCapabilitiesFromConf() throws @@ -1138,7 +1143,8 @@ private void handleContainerStop(String containerId, Map env) DockerCommandExecutor.getContainerStatus(containerId, conf, privilegedOperationExecutor); if (DockerCommandExecutor.isStoppable(containerStatus)) { - DockerStopCommand dockerStopCommand = new DockerStopCommand(containerId); + DockerStopCommand dockerStopCommand = new DockerStopCommand( + containerId, dockerStopGracePeriod); DockerCommandExecutor.executeDockerCommand(dockerStopCommand, containerId, env, conf, privilegedOperationExecutor, false); } else { 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/linux/runtime/docker/DockerStopCommand.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/docker/DockerStopCommand.java index ccfff827a0a..025d268fa62 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/docker/DockerStopCommand.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/docker/DockerStopCommand.java @@ -32,6 +32,12 @@ public DockerStopCommand(String containerName) { super.addCommandArguments("name", containerName); } + public DockerStopCommand(String containerName, int gracePeriod) { + super(STOP_COMMAND); + super.addCommandArguments("name", containerName); + super.addCommandArguments("time", Integer.toString(gracePeriod)); + } + public DockerStopCommand setGracePeriod(int value) { super.addCommandArguments("time", Integer.toString(value)); return this;