diff --git a/hadoop-yarn-project/hadoop-yarn/conf/container-executor.cfg b/hadoop-yarn-project/hadoop-yarn/conf/container-executor.cfg index 4c698b57b1a..b0c8e5c66c1 100644 --- a/hadoop-yarn-project/hadoop-yarn/conf/container-executor.cfg +++ b/hadoop-yarn-project/hadoop-yarn/conf/container-executor.cfg @@ -2,7 +2,7 @@ yarn.nodemanager.linux-container-executor.group=#configured value of yarn.nodema banned.users=#comma separated list of users who can not run applications min.user.id=1000#Prevent other super-users allowed.system.users=##comma separated list of system users who CAN run applications -feature.tc.enabled=0 +feature.tc.enabled=true # The configs below deal with settings for Docker #[docker] @@ -13,7 +13,7 @@ feature.tc.enabled=0 # docker.allowed.networks=## comma seperated networks that can be used. e.g bridge,host,none # docker.allowed.ro-mounts=## comma seperated volumes that can be mounted as read-only # docker.allowed.rw-mounts=## comma seperate volumes that can be mounted as read-write, add the yarn local and log dirs to this list to run Hadoop jobs -# docker.privileged-containers.enabled=0 +# docker.privileged-containers.enabled=false # docker.allowed.volume-drivers=## comma seperated list of allowed volume-drivers # The configs below deal with settings for FPGA resource 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 3b04f889f6d..65390ad50bf 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 @@ -438,19 +438,24 @@ int is_feature_enabled(const char* feature_key, int default_value, int enabled = default_value; if (enabled_str != NULL) { - char *end_ptr = NULL; - enabled = strtol(enabled_str, &end_ptr, 10); - - if ((enabled_str == end_ptr || *end_ptr != '\0') || - (enabled < 0 || enabled > 1)) { - fprintf(LOGFILE, "Illegal value '%s' for '%s' in configuration. " - "Using default value: %d.\n", enabled_str, feature_key, - default_value); - fflush(LOGFILE); - free(enabled_str); - return default_value; - } + if (strcmp(enabled_str, "true") == 0 || + strcmp(enabled_str, "True") == 0) { + enabled = 1; + } else { + char *end_ptr = NULL; + enabled = strtol(enabled_str, &end_ptr, 10); + + if ((enabled_str == end_ptr || *end_ptr != '\0') || + (enabled < 0 || enabled > 1)) { + fprintf(LOGFILE, "Illegal value '%s' for '%s' in configuration. " + "Using default value: %d.\n", enabled_str, feature_key, + default_value); + fflush(LOGFILE); + free(enabled_str); + return default_value; + } + } free(enabled_str); return enabled; } else { 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 a0138d19d71..57b70e23772 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 @@ -983,9 +983,12 @@ static int set_privileged(const struct configuration *command_config, const stru = get_configuration_value("docker.privileged-containers.enabled", CONTAINER_EXECUTOR_CFG_DOCKER_SECTION, conf); int ret = 0; - if (value != NULL && strcmp(value, "true") == 0) { + if (value != NULL && + (strcmp(value, "true") == 0 || strcmp(value, "True") == 0)) { if (privileged_container_enabled != NULL) { - if (strcmp(privileged_container_enabled, "1") == 0) { + if (strcmp(privileged_container_enabled, "1") == 0 || + strcmp(privileged_container_enabled, "true") == 0 || + strcmp(privileged_container_enabled, "True") == 0) { ret = add_to_buffer(out, outlen, "--privileged "); 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/test-container-executor.c b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/test-container-executor.c index 4e8db6cd8a8..d9f7f8a260d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/test-container-executor.c +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/test/test-container-executor.c @@ -425,6 +425,8 @@ void test_is_feature_enabled() { fprintf(file, "feature.name4.enabled=asdkjfasdkljfklsdjf0\n"); fprintf(file, "feature.name5.enabled=-1\n"); fprintf(file, "feature.name6.enabled=2\n"); + fprintf(file, "feature.name7.enabled=true\n"); + fprintf(file, "feature.name8.enabled=True\n"); fclose(file); read_config(filename, &exec_cfg); cfg = *(get_configuration_section("", &exec_cfg)); @@ -441,6 +443,10 @@ void test_is_feature_enabled() { enabled, &cfg); validate_feature_enabled_value(disabled, "feature.name6.enabled", disabled, &cfg); + validate_feature_enabled_value(enabled, "feature.name7.enabled", + disabled, &cfg); + validate_feature_enabled_value(enabled, "feature.name8.enabled", + disabled, &cfg); free_configuration(&exec_cfg); 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 0c1c4bff69c..ff9b2fd70d2 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 @@ -469,36 +469,42 @@ namespace ContainerExecutor { char buff[buff_len]; int ret = 0; std::string container_executor_cfg_contents[] = {"[docker]\n docker.privileged-containers.enabled=1", + "[docker]\n docker.privileged-containers.enabled=true", + "[docker]\n docker.privileged-containers.enabled=True", "[docker]\n docker.privileged-containers.enabled=0", + "[docker]\n docker.privileged-containers.enabled=false", "[docker]\n"}; std::vector > file_cmd_vec; + std::vector >::const_iterator itr; file_cmd_vec.push_back(std::make_pair( "[docker-command-execution]\n docker-command=run\n privileged=true", "--privileged ")); file_cmd_vec.push_back(std::make_pair( "[docker-command-execution]\n docker-command=run\n privileged=false", "")); file_cmd_vec.push_back(std::make_pair( "[docker-command-execution]\n docker-command=run", "")); - write_container_executor_cfg(container_executor_cfg_contents[0]); - ret = read_config(container_executor_cfg_file.c_str(), &container_cfg); + for (int i = 0; i < 3; i++ ) { + write_container_executor_cfg(container_executor_cfg_contents[i]); + ret = read_config(container_executor_cfg_file.c_str(), &container_cfg); - std::vector >::const_iterator itr; - if (ret != 0) { - FAIL(); - } - for (itr = file_cmd_vec.begin(); itr != file_cmd_vec.end(); ++itr) { - memset(buff, 0, buff_len); - write_command_file(itr->first); - ret = read_config(docker_command_file.c_str(), &cmd_cfg); if (ret != 0) { FAIL(); } - ret = set_privileged(&cmd_cfg, &container_cfg, buff, buff_len); - ASSERT_EQ(0, ret); + for (itr = file_cmd_vec.begin(); itr != file_cmd_vec.end(); ++itr) { + memset(buff, 0, buff_len); + write_command_file(itr->first); + ret = read_config(docker_command_file.c_str(), &cmd_cfg); + if (ret != 0) { + FAIL(); + } + ret = set_privileged(&cmd_cfg, &container_cfg, buff, buff_len); + ASSERT_EQ(0, ret); ASSERT_STREQ(itr->second.c_str(), buff); + } } + // check default case and when it's turned off - for (int i = 1; i < 3; ++i) { + for (int i = 3; i < 5; ++i) { write_container_executor_cfg(container_executor_cfg_contents[i]); ret = read_config(container_executor_cfg_file.c_str(), &container_cfg); if (ret != 0) {