commit 07477893262bfc38bf6e89181437a6c52f2dddf2 Author: Eric Yang Date: Fri Apr 5 14:28:51 2019 -0400 YARN-7848. Added force option to docker container remove. Contributed by Eric Yang 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/DockerRmCommand.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/DockerRmCommand.java index b4b692b..96feaa6 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/DockerRmCommand.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/DockerRmCommand.java @@ -37,6 +37,7 @@ public DockerRmCommand(String containerName, String hierarchy) { super.addCommandArguments(CGROUP_HIERARCHY, hierarchy); this.cGroupArg = hierarchy; } + super.addCommandArguments("force", "true"); } @Override diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c index 1339c67..6ea2006 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/utils/docker-util.c @@ -709,6 +709,7 @@ free_pull: int get_docker_rm_command(const char *command_file, const struct configuration *conf, args *args) { int ret = 0; char *container_name = NULL; + char *force = NULL; struct configuration command_config = {0, NULL}; ret = read_and_verify_command_file(command_file, DOCKER_RM_COMMAND, &command_config); if (ret != 0) { @@ -723,6 +724,13 @@ int get_docker_rm_command(const char *command_file, const struct configuration * ret = add_to_args(args, DOCKER_RM_COMMAND); if (ret == 0) { + force = get_configuration_value("force", DOCKER_COMMAND_FILE_SECTION, &command_config); + if (force == NULL || strcasecmp(force, "true") == 0 ) { + ret = add_to_args(args, "-f"); + if (ret != 0) { + goto free_and_exit; + } + } ret = add_to_args(args, container_name); if (ret != 0) { ret = BUFFER_TOO_SMALL; @@ -731,6 +739,7 @@ int get_docker_rm_command(const char *command_file, const struct configuration * free_and_exit: free(container_name); free_configuration(&command_config); + free(force); return ret; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/utils/test_docker_util.cc b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/utils/test_docker_util.cc index d8f609d..5a32b88 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/utils/test_docker_util.cc +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/utils/test_docker_util.cc @@ -304,7 +304,7 @@ namespace ContainerExecutor { file_cmd_vec.push_back( std::make_pair( "[docker-command-execution]\n docker-command=rm\n name=container_e1_12312_11111_02_000001", - "rm container_e1_12312_11111_02_000001")); + "rm -f container_e1_12312_11111_02_000001")); std::vector > bad_file_cmd_vec; bad_file_cmd_vec.push_back(std::make_pair( @@ -1710,8 +1710,8 @@ namespace ContainerExecutor { "[docker-command-execution]\n docker-command=pull\n docker-config=/my-config\n image=image-id", "/usr/bin/docker --config=/my-config pull image-id")); input_output_map.push_back(std::make_pair( - "[docker-command-execution]\n docker-command=rm\n docker-config=/my-config\n name=container_e1_12312_11111_02_000001", - "/usr/bin/docker --config=/my-config rm container_e1_12312_11111_02_000001")); + "[docker-command-execution]\n docker-command=rm\n docker-config=/my-config\n force=true\n name=container_e1_12312_11111_02_000001", + "/usr/bin/docker --config=/my-config rm -f container_e1_12312_11111_02_000001")); input_output_map.push_back(std::make_pair( "[docker-command-execution]\n docker-command=stop\n docker-config=/my-config\n name=container_e1_12312_11111_02_000001", "/usr/bin/docker --config=/my-config stop container_e1_12312_11111_02_000001"));