commit 41e29dd5e9c0425f5435f7ba4fafe195af1c2e1f Author: Eric Yang Date: Mon Apr 8 17:53:21 2019 -0400 YARN-7848. Added force command to docker container removal. Contributed by Eric Yang diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c index cba84ac..fa5b414 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c @@ -3205,12 +3205,14 @@ int remove_docker_container(char**argv, int argc) { const char *yarn_hierarchy = NULL; const char *container_id = NULL; - int start_index = 0; + char **args = alloc_and_clear_memory(argc + 1, sizeof(char *)); + args[0] = "-f"; if (argc == 2) { yarn_hierarchy = argv[0]; + args[1] = argv[1]; container_id = argv[1]; - // Skip the yarn_hierarchy argument for exec_docker_command - start_index = 1; + } else { + args[1] = argv[0]; } pid_t child_pid = fork(); @@ -3222,9 +3224,9 @@ int remove_docker_container(char**argv, int argc) { } if (child_pid == 0) { // child - int rc = exec_docker_command("rm", argv + start_index, argc - start_index); + int rc = exec_docker_command("rm", args, 2); + free_values(args); return rc; // Only get here if exec fails - } else { // parent exit_code = wait_and_get_exit_code(child_pid); if (exit_code != 0) { 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..7b77fbb 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 @@ -723,6 +723,10 @@ int get_docker_rm_command(const char *command_file, const struct configuration * ret = add_to_args(args, DOCKER_RM_COMMAND); if (ret == 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; 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..f57413e 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( @@ -1711,7 +1711,7 @@ namespace ContainerExecutor { "/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")); + "/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"));