HBASE-27651 hbase-daemon.sh foreground_start should propagate SIGHUP and SIGTERM

Introduce separate `trap`s for SIGHUP vs. the rest. Treat `SIGINT`, `SIGKILL`, and `EXIT` identically, as before. Use the signal name without `SIG` prefix for increased portability, as per the POSIX man page for `trap`.

`SIGTERM` handler will now honor `HBASE_STOP_TIMEOUT` as described in the file header.

Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Michael Stack <stack@apache.org>
This commit is contained in:
Nick Dimiduk 2023-03-20 14:58:15 +01:00 committed by Nick Dimiduk
parent 0bc7f56a00
commit 85b599b96a
1 changed files with 27 additions and 13 deletions

View File

@ -78,22 +78,34 @@ hbase_rotate_log ()
fi
}
cleanAfterRun() {
if [ -f ${HBASE_PID} ]; then
# If the process is still running time to tear it down.
kill -9 `cat ${HBASE_PID}` > /dev/null 2>&1
rm -f ${HBASE_PID} > /dev/null 2>&1
function sighup_handler
{
# pass through SIGHUP if we can
if [ -f "${HBASE_PID}" ] ; then
kill -s HUP "$(cat "${HBASE_PID}")"
fi
}
if [ -f ${HBASE_ZNODE_FILE} ]; then
if [ "$command" = "master" ]; then
HBASE_OPTS="$HBASE_OPTS $HBASE_MASTER_OPTS" $bin/hbase master clear > /dev/null 2>&1
else
#call ZK to delete the node
ZNODE=`cat ${HBASE_ZNODE_FILE}`
HBASE_OPTS="$HBASE_OPTS $HBASE_REGIONSERVER_OPTS" $bin/hbase zkcli delete ${ZNODE} > /dev/null 2>&1
function sigterm_handler
{
if [ -f "${HBASE_PID}" ]; then
kill -s TERM "$(cat "${HBASE_PID}")"
waitForProcessEnd "$(cat "${HBASE_PID}")" "${command}"
fi
rm ${HBASE_ZNODE_FILE}
cleanAfterRun
}
cleanAfterRun() {
rm -f "${HBASE_PID}" > /dev/null 2>&1
if [ -f "${HBASE_ZNODE_FILE}" ]; then
if [ "${command}" = "master" ]; then
HBASE_OPTS="$HBASE_OPTS $HBASE_MASTER_OPTS" "${bin}/hbase" master clear > /dev/null 2>&1
else
# call ZK to delete the node
ZNODE="$(cat "${HBASE_ZNODE_FILE}")"
HBASE_OPTS="$HBASE_OPTS $HBASE_REGIONSERVER_OPTS" "${bin}/hbase" zkcli delete "${ZNODE}" > /dev/null 2>&1
fi
rm -f "${HBASE_ZNODE_FILE}" > /dev/null 2>&1
fi
}
@ -225,7 +237,9 @@ case $startStop in
;;
(foreground_start)
trap cleanAfterRun SIGHUP SIGINT SIGTERM EXIT
trap sighup_handler HUP
trap sigterm_handler INT TERM EXIT
if [ "$HBASE_NO_REDIRECT_LOG" != "" ]; then
# NO REDIRECT
echo "`date` Starting $command on `hostname`"