Commit c78fc8b1 authored by Nirbhay Choubey's avatar Nirbhay Choubey

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.
parent dcb7996c
...@@ -18,8 +18,10 @@ ...@@ -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 ...@@ -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() ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment