| #!/bin/bash |
| # |
| # 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. |
| |
| # Invoke Drill using Java. Command line arguments are assumed to be |
| # of the form |
| # exec|debug |
| # The debug option simply prints the command line option, but does not |
| # run Drill. Anything else runs Drill. (Command line options passed to |
| # drillbit.sh are passed into this script in the args[] variable, see |
| # below.) |
| # |
| # Environment Variables |
| # |
| # SERVER_LOG_GC Set to "1" to enable Java garbage collector |
| # logging. |
| # DRILL_LOG_PREFIX Path and name prefix for log files. |
| # (Set in drill-config.sh.) |
| # DRILLBIT_LOG_PATH Path to the Drillbit log file. |
| # (Set in drill-config.sh.) |
| # DRILL_JAVA_OPTS Optional JVM arguments such as system |
| # property overides used by both the |
| # drillbit (server) and client, |
| # set in drill-env.sh or the environment. |
| # DRILLBIT_JAVA_OPTS Optional JVM arguments specifically for |
| # the server (drillbit). Set in the |
| # environment or in the user defined |
| # drill-env.sh |
| # SERVER_GC_OPTS Defaults set in drill-config.sh, customized |
| # in drill-env.sh. |
| # CP Drillbit classpath set in drill-config.sh |
| # args[] -Dname=value arguments to pass to the JVM |
| # for per-run override of configuration options. |
| |
| cmd=$1 |
| shift |
| |
| drill_rotate_log () |
| { |
| log=$1; |
| num=5; |
| if [ -n "$2" ]; then |
| num=$2 |
| fi |
| if [ -f "$log" ]; then # rotate logs |
| while [ $num -gt 1 ]; do |
| prev=`expr $num - 1` |
| [ -f "$log.$prev" ] && mv -f "$log.$prev" "$log.$num" |
| num=$prev |
| done |
| mv -f "$log" "$log.$num"; |
| fi |
| } |
| |
| # Enable GC logging if requested. |
| # Note: if using YARN log dir, then no log rotation because each run under YARN |
| # gets a new log directory. |
| |
| if [ "$SERVER_LOG_GC" == "1" ]; then |
| loggc="${DRILL_LOG_PREFIX}.gc" |
| SERVER_GC_OPTS="${SERVER_GC_OPTS} -Xloggc:${loggc}" |
| if [ -z "$DRILL_YARN_LOG_DIR" ]; then |
| drill_rotate_log $loggc |
| fi |
| fi |
| |
| logqueries="${DRILL_LOG_PREFIX}_queries.json" |
| LOG_OPTS="-Dlog.path=$DRILLBIT_LOG_PATH -Dlog.query.path=$logqueries" |
| if [ -n "$DRILL_JAVA_LIB_PATH" ]; then |
| DRILL_JAVA_OPTS="$DRILL_JAVA_OPTS -Djava.library.path=$DRILL_JAVA_LIB_PATH" |
| fi |
| DRILL_ALL_JAVA_OPTS="$DRILLBIT_OPTS $DRILL_JAVA_OPTS $DRILLBIT_JAVA_OPTS $SERVER_GC_OPTS $@ $LOG_OPTS" |
| BITCMD="$JAVA $DRILL_ALL_JAVA_OPTS -cp $CP org.apache.drill.exec.server.Drillbit" |
| |
| # The wrapper is purely for unit testing. |
| |
| if [ -n "$_DRILL_WRAPPER_" ]; then |
| BITCMD="$_DRILL_WRAPPER_ $BITCMD" |
| fi |
| |
| # Run the command (exec) or just print it (debug). |
| # Three options: run as a child (run), run & replace this process (exec) or |
| # just print the command (debug). |
| |
| case $cmd in |
| (debug) |
| echo "----------------- Environment ------------------" |
| env |
| echo "------------------------------------------------" |
| echo "Launch command:" |
| echo $BITCMD |
| ;; |
| (*) |
| exec $BITCMD |
| ;; |
| esac |