mirror of
https://github.com/apache/impala.git
synced 2026-01-01 00:00:20 -05:00
The original error reporting relied on $0 being accessible from the current working dir, which failed if a script changed the working dir and $0 was relative. This updates the error reporting command to cd back to the original dir before accessing $0. Change-Id: I2185af66e35e29b41dbe1bb08de24200bacea8a1 Reviewed-on: http://gerrit.cloudera.org:8080/1666 Reviewed-by: Casey Ching <casey@cloudera.com> Tested-by: Internal Jenkins
61 lines
1.4 KiB
Bash
Executable File
61 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (c) 2015 Cloudera, Inc. All rights reserved.
|
|
|
|
set -euo pipefail
|
|
trap 'echo Error in $0 at line $LINENO: $(cd "'$PWD'" && awk "NR == $LINENO" $0)' ERR
|
|
|
|
CLASSES=()
|
|
EXTRA_SHUTDOWN_TIME_SECS=1
|
|
|
|
while getopts :c:s: OPTION; do
|
|
case $OPTION in
|
|
c) CLASSES+=($OPTARG);;
|
|
s) EXTRA_SHUTDOWN_TIME_SECS=$OPTARG;;
|
|
*) echo "Usage: $0 -c <java class name> [-c ...] " \
|
|
"[-s <wait time after stopping all processes>]"
|
|
exit 1;;
|
|
esac
|
|
done
|
|
|
|
if [[ ${#CLASSES[@]} -eq 0 ]]; then
|
|
echo At least one class must be given >&2
|
|
exit 1
|
|
fi
|
|
|
|
function pid_is_running {
|
|
kill -0 $1 &>/dev/null
|
|
}
|
|
|
|
# Waits for 3 seconds for a pid to stop. Returns success if the pid is stopped otherwise
|
|
# returns failure.
|
|
function wait_for_pid_to_stop {
|
|
for I in {1..30}; do
|
|
if ! pid_is_running $1; then
|
|
return
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
return 1
|
|
}
|
|
|
|
NEEDS_EXTRA_WAIT=false
|
|
for CLASS in ${CLASSES[@]}; do
|
|
PID=$(jps -m | (grep $CLASS || true) | awk '{print $1}')
|
|
if [[ -z $PID ]]; then
|
|
continue
|
|
fi
|
|
kill $PID || true # Don't error if the process somehow died on its own.
|
|
NEEDS_EXTRA_WAIT=true
|
|
if wait_for_pid_to_stop $PID; then
|
|
continue
|
|
fi
|
|
kill -9 $PID || true
|
|
if ! wait_for_pid_to_stop $PID; then
|
|
echo Unable to stop process $PID running java class $CLASS >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
if $NEEDS_EXTRA_WAIT; then
|
|
sleep $EXTRA_SHUTDOWN_TIME_SECS
|
|
fi
|