MTR: rsync process is left running if pid file is removed

MTR drops the datadir in the event of a test failure. In case mysqld
is running as a Galera node and a failure occurs while the SST is in
progress, the rsync pid file gets removed as part of the cleanup and
wsrep_sst_rsync, which relies on this file, fails to kill the rsync.
Fixed by using the cached $RSYNC_REAL_PID to kill rsync daemon.
This commit is contained in:
Nirbhay Choubey 2015-11-16 12:35:06 -05:00
parent dcb7996cb7
commit c78fc8b1ea

View File

@ -18,8 +18,10 @@
# This is a reference script for rsync-based state snapshot tansfer # This is a reference script for rsync-based state snapshot tansfer
RSYNC_PID= RSYNC_PID= # rsync pid file
RSYNC_CONF= RSYNC_CONF= # rsync configuration file
RSYNC_REAL_PID= # rsync process id
OS=$(uname) OS=$(uname)
[ "$OS" == "Darwin" ] && export -n LD_LIBRARY_PATH [ "$OS" == "Darwin" ] && export -n LD_LIBRARY_PATH
@ -32,10 +34,12 @@ wsrep_check_programs rsync
cleanup_joiner() cleanup_joiner()
{ {
local PID=$(cat "$RSYNC_PID" 2>/dev/null || echo 0) wsrep_log_info "Joiner cleanup. rsync PID: $RSYNC_REAL_PID"
wsrep_log_info "Joiner cleanup. rsync PID: $PID" [ "0" != "$RSYNC_REAL_PID" ] && \
[ "0" != "$PID" ] && kill $PID && sleep 0.5 && kill -9 $PID >/dev/null 2>&1 \ kill $RSYNC_REAL_PID && \
|| : sleep 0.5 && \
kill -9 $RSYNC_REAL_PID >/dev/null 2>&1 || \
:
rm -rf "$RSYNC_CONF" rm -rf "$RSYNC_CONF"
rm -rf "$MAGIC_FILE" rm -rf "$MAGIC_FILE"
rm -rf "$RSYNC_PID" rm -rf "$RSYNC_PID"
@ -45,6 +49,7 @@ cleanup_joiner()
fi fi
} }
# Check whether rsync process is still running.
check_pid() check_pid()
{ {
local pid_file=$1 local pid_file=$1