From e00c7f78c1c00467319ce5b92e4a3ebc691d246e Mon Sep 17 00:00:00 2001 From: Arpit Agarwal Date: Mon, 4 Dec 2017 21:02:01 -0800 Subject: [PATCH] HADOOP-14976. Set HADOOP_SHELL_EXECNAME explicitly in scripts. --- .../hadoop-common/src/main/bin/hadoop | 7 +++- .../test/scripts/hadoop_shell_execname.bats | 36 +++++++++++++++++++ .../hadoop-hdfs/src/main/bin/hdfs | 9 +++-- .../test/scripts/hadoop_shell_execname.bats | 36 +++++++++++++++++++ hadoop-mapreduce-project/bin/mapred | 4 ++- hadoop-yarn-project/hadoop-yarn/bin/yarn | 3 +- 6 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 hadoop-common-project/hadoop-common/src/test/scripts/hadoop_shell_execname.bats create mode 100644 hadoop-hdfs-project/hadoop-hdfs/src/test/scripts/hadoop_shell_execname.bats diff --git a/hadoop-common-project/hadoop-common/src/main/bin/hadoop b/hadoop-common-project/hadoop-common/src/main/bin/hadoop index 38346002cc..1e57185e5b 100755 --- a/hadoop-common-project/hadoop-common/src/main/bin/hadoop +++ b/hadoop-common-project/hadoop-common/src/main/bin/hadoop @@ -15,8 +15,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The name of the script being executed. +HADOOP_SHELL_EXECNAME="hadoop" MYNAME="${BASH_SOURCE-$0}" -HADOOP_SHELL_EXECNAME="${MYNAME##*/}" ## @description build up the hadoop command's usage text. ## @audience public @@ -124,6 +125,10 @@ function hadoopcmd_case echo "HADOOP_TOOLS_HOME='${HADOOP_TOOLS_HOME}'" echo "HADOOP_TOOLS_DIR='${HADOOP_TOOLS_DIR}'" echo "HADOOP_TOOLS_LIB_JARS_DIR='${HADOOP_TOOLS_LIB_JARS_DIR}'" + if [[ -n "${QATESTMODE}" ]]; then + echo "MYNAME=${MYNAME}" + echo "HADOOP_SHELL_EXECNAME=${HADOOP_SHELL_EXECNAME}" + fi exit 0 ;; fs) diff --git a/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_shell_execname.bats b/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_shell_execname.bats new file mode 100644 index 0000000000..b9c7ca8c7f --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_shell_execname.bats @@ -0,0 +1,36 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load hadoop-functions_test_helper + +# Setup minimal environment to invoke the 'hadoop' command. +hadoopcommandsetup () { + export HADOOP_LIBEXEC_DIR="${TMP}/libexec" + export HADOOP_CONF_DIR="${TMP}/conf" + mkdir -p "${HADOOP_LIBEXEC_DIR}" + echo ". \"${BATS_TEST_DIRNAME}/../../main/bin/hadoop-functions.sh\"" > "${HADOOP_LIBEXEC_DIR}/hadoop-config.sh" + chmod a+rx "${HADOOP_LIBEXEC_DIR}/hadoop-config.sh" +} + +# Verify that the 'hadoop' command correctly infers MYNAME and +# HADOOP_SHELL_EXECNAME +@test "hadoop_shell_execname" { + hadoopcommandsetup + export QATESTMODE=unittest + run "${BATS_TEST_DIRNAME}/../../main/bin/hadoop" envvars + echo ">${output}<" + [[ ${output} =~ MYNAME=.*/hadoop ]] + [[ ${output} =~ HADOOP_SHELL_EXECNAME=hadoop ]] +} diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/bin/hdfs b/hadoop-hdfs-project/hadoop-hdfs/src/main/bin/hdfs index a37c39f220..38be348bbd 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/bin/hdfs +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/bin/hdfs @@ -15,8 +15,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The name of the script being executed. +HADOOP_SHELL_EXECNAME="hdfs" MYNAME="${BASH_SOURCE-$0}" -HADOOP_SHELL_EXECNAME="${MYNAME##*/}" ## @description build up the hdfs command's usage text. ## @audience public @@ -126,6 +127,10 @@ function hdfscmd_case echo "HADOOP_TOOLS_HOME='${HADOOP_TOOLS_HOME}'" echo "HADOOP_TOOLS_DIR='${HADOOP_TOOLS_DIR}'" echo "HADOOP_TOOLS_LIB_JARS_DIR='${HADOOP_TOOLS_LIB_JARS_DIR}'" + if [[ -n "${QATESTMODE}" ]]; then + echo "MYNAME=${MYNAME}" + echo "HADOOP_SHELL_EXECNAME=${HADOOP_SHELL_EXECNAME}" + fi exit 0 ;; ec) @@ -269,4 +274,4 @@ fi hadoop_subcommand_opts "${HADOOP_SHELL_EXECNAME}" "${HADOOP_SUBCMD}" # everything is in globals at this point, so call the generic handler -hadoop_generic_java_subcmd_handler \ No newline at end of file +hadoop_generic_java_subcmd_handler diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/scripts/hadoop_shell_execname.bats b/hadoop-hdfs-project/hadoop-hdfs/src/test/scripts/hadoop_shell_execname.bats new file mode 100644 index 0000000000..16c892eb70 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/scripts/hadoop_shell_execname.bats @@ -0,0 +1,36 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load hdfs-functions_test_helper + +# Setup minimal environment to invoke the 'hdfs' command. +hdfscommandsetup () { + export HADOOP_LIBEXEC_DIR="${TMP}/libexec" + export HADOOP_CONF_DIR="${TMP}/conf" + mkdir -p "${HADOOP_LIBEXEC_DIR}" + echo ". \"${BATS_TEST_DIRNAME}/../../../../../hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh\"" > "${HADOOP_LIBEXEC_DIR}/hdfs-config.sh" + chmod a+rx "${HADOOP_LIBEXEC_DIR}/hdfs-config.sh" +} + +# Verify that the 'hdfs' command correctly infers MYNAME and +# HADOOP_SHELL_EXECNAME +@test "hadoop_shell_execname" { + hdfscommandsetup + export QATESTMODE=unittest + run "${BATS_TEST_DIRNAME}/../../main/bin/hdfs" envvars + echo ">${output}<" + [[ ${output} =~ MYNAME=.*/hdfs ]] + [[ ${output} =~ HADOOP_SHELL_EXECNAME=hdfs ]] +} diff --git a/hadoop-mapreduce-project/bin/mapred b/hadoop-mapreduce-project/bin/mapred index ce9ce217ae..44f6216443 100755 --- a/hadoop-mapreduce-project/bin/mapred +++ b/hadoop-mapreduce-project/bin/mapred @@ -15,8 +15,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The name of the script being executed. +HADOOP_SHELL_EXECNAME="mapred" MYNAME="${BASH_SOURCE-$0}" -HADOOP_SHELL_EXECNAME="${MYNAME##*/}" + ## @description build up the mapred command's usage text. ## @audience public diff --git a/hadoop-yarn-project/hadoop-yarn/bin/yarn b/hadoop-yarn-project/hadoop-yarn/bin/yarn index d7b44b91fc..9a1dc193b7 100755 --- a/hadoop-yarn-project/hadoop-yarn/bin/yarn +++ b/hadoop-yarn-project/hadoop-yarn/bin/yarn @@ -15,8 +15,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The name of the script being executed. +HADOOP_SHELL_EXECNAME="yarn" MYNAME="${BASH_SOURCE-$0}" -HADOOP_SHELL_EXECNAME="${MYNAME##*/}" ## @description build up the yarn command's usage text. ## @audience public