From c7eb4163db4c63ad5ecad6781d11c07dbdf1c4a6 Mon Sep 17 00:00:00 2001 From: Josh Elser Date: Fri, 9 Dec 2016 20:21:42 -0500 Subject: [PATCH] HBASE-17285 Prevent extraneous text in java.library.path from breaking execution With certain JVM configuration in HADOOP_CLIENT_OPTS, this could break us from executing our process correctly. With more aggressive quoting, we can prevent this. --- bin/hbase | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/bin/hbase b/bin/hbase index 1653c5a..f6053bc 100755 --- a/bin/hbase +++ b/bin/hbase @@ -413,8 +413,11 @@ HBASE_OPTS="$HBASE_OPTS -Dhbase.log.file=$HBASE_LOGFILE" HBASE_OPTS="$HBASE_OPTS -Dhbase.home.dir=$HBASE_HOME" HBASE_OPTS="$HBASE_OPTS -Dhbase.id.str=$HBASE_IDENT_STRING" HBASE_OPTS="$HBASE_OPTS -Dhbase.root.logger=${HBASE_ROOT_LOGGER:-INFO,console}" +# Use a separate variable that we can quote on its own to avoid screwing up +# Java's parsing of everything else in HBASE_OPTS +JAVA_LIBRARY_PATH_OPT="" if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then - HBASE_OPTS="$HBASE_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH" + JAVA_LIBRARY_PATH_OPT="-Djava.library.path=$JAVA_LIBRARY_PATH" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$JAVA_LIBRARY_PATH" fi @@ -429,7 +432,19 @@ HEAP_SETTINGS="$JAVA_HEAP_MAX $JAVA_OFFHEAP_MAX" # Exec unless HBASE_NOEXEC is set. export CLASSPATH if [ "${HBASE_NOEXEC}" != "" ]; then - "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "$@" + # If JAVA_LIBRARY_PATH_OPT is empty, it would leave an extra set of quotation marks which screws up java finding the + # main clas + if [ -z "$JAVA_LIBRARY_PATH_OPT" ]; then + "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "$@" + else + "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS "$JAVA_LIBRARY_PATH_OPT" $CLASS "$@" + fi else - exec "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "$@" + # If JAVA_LIBRARY_PATH_OPT is empty, it would leave an extra set of quotation marks which screws up java finding the + # main class. + if [ -z "$JAVA_LIBRARY_PATH_OPT" ]; then + exec "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "$@" + else + exec "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS "$JAVA_LIBRARY_PATH_OPT" $CLASS "$@" + fi fi -- 2.10.2