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;