diff --git a/scripts/wsrep_sst_mariabackup.sh b/scripts/wsrep_sst_mariabackup.sh index de219283d15..c607cb7d7eb 100644 --- a/scripts/wsrep_sst_mariabackup.sh +++ b/scripts/wsrep_sst_mariabackup.sh @@ -687,16 +687,16 @@ cleanup_at_exit() fi if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then + if [ -n "$BACKUP_PID" ]; then + if ps -p $BACKUP_PID >/dev/null 2>&1; then + wsrep_log_error \ + "mariadb-backup process is still running. Killing..." + cleanup_pid $CHECK_PID + fi + fi wsrep_log_info "Removing the sst_in_progress file" wsrep_cleanup_progress_file else - if [ -n "$BACKUP_PID" ]; then - if check_pid "$BACKUP_PID" 1; then - wsrep_log_error \ - "mariadb-backup process is still running. Killing..." - cleanup_pid $CHECK_PID "$BACKUP_PID" - fi - fi [ -f "$DATA/$IST_FILE" ] && rm -f "$DATA/$IST_FILE" || : fi @@ -906,14 +906,14 @@ monitor_process() local sst_stream_pid=$1 while :; do - if ! ps -p "$WSREP_SST_OPT_PARENT" >/dev/null 2>&1; then + if ! ps -p $WSREP_SST_OPT_PARENT >/dev/null 2>&1; then wsrep_log_error \ "Parent mysqld process (PID: $WSREP_SST_OPT_PARENT)" \ "terminated unexpectedly." - kill -- -"$WSREP_SST_OPT_PARENT" + kill -- -$WSREP_SST_OPT_PARENT exit 32 fi - if ! ps -p "$sst_stream_pid" >/dev/null 2>&1; then + if ! ps -p $sst_stream_pid >/dev/null 2>&1; then break fi sleep 0.1 @@ -1073,7 +1073,7 @@ SST_PID="$DATA/wsrep_sst.pid" # give some time for previous SST to complete: check_round=0 -while check_pid "$SST_PID" 0; do +while check_pid "$SST_PID"; do wsrep_log_info "previous SST is not completed, waiting for it to exit" check_round=$(( check_round+1 )) if [ $check_round -eq 30 ]; then @@ -1220,9 +1220,6 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then exit 22 fi - # mariadb-backup implicitly writes PID to fixed location in $xtmpdir - BACKUP_PID="$xtmpdir/xtrabackup_pid" - else # BYPASS FOR IST wsrep_log_info "Bypassing the SST for IST" @@ -1402,7 +1399,7 @@ else # joiner fi mkdir -p "$DATA/.sst" (recv_joiner "$DATA/.sst" "$stagemsg-SST" 0 0 0) & - jpid=$! + BACKUP_PID=$! wsrep_log_info "Proceeding with SST" get_binlog @@ -1447,6 +1444,7 @@ else # joiner # Deleting files from previous SST and legacy files from old versions: [ -f "$DATA/xtrabackup_binary" ] && rm -f "$DATA/xtrabackup_binary" + [ -f "$DATA/xtrabackup_pid" ] && rm -f "$DATA/xtrabackup_pid" [ -f "$DATA/xtrabackup_checkpoints" ] && rm -f "$DATA/xtrabackup_checkpoints" [ -f "$DATA/xtrabackup_info" ] && rm -f "$DATA/xtrabackup_info" [ -f "$DATA/xtrabackup_slave_info" ] && rm -f "$DATA/xtrabackup_slave_info" @@ -1457,7 +1455,8 @@ else # joiner MAGIC_FILE="$DATA/$INFO_FILE" wsrep_log_info "Waiting for SST streaming to complete!" - monitor_process $jpid + monitor_process $BACKUP_PID + BACKUP_PID="" if [ ! -s "$DATA/xtrabackup_checkpoints" ]; then wsrep_log_error "xtrabackup_checkpoints missing," \ diff --git a/scripts/wsrep_sst_rsync.sh b/scripts/wsrep_sst_rsync.sh index b05f4bc2efd..55b94ff6009 100644 --- a/scripts/wsrep_sst_rsync.sh +++ b/scripts/wsrep_sst_rsync.sh @@ -351,7 +351,7 @@ SST_PID="$DATA/wsrep_sst.pid" # give some time for previous SST to complete: check_round=0 -while check_pid "$SST_PID" 0; do +while check_pid "$SST_PID"; do wsrep_log_info "Previous SST is not completed, waiting for it to exit" check_round=$(( check_round+1 )) if [ $check_round -eq 20 ]; then @@ -866,19 +866,18 @@ EOF echo "ready $ADDR:$RSYNC_PORT/$MODULE" - MYSQLD_PID="$WSREP_SST_OPT_PARENT" - # wait for SST to complete by monitoring magic file while [ ! -r "$MAGIC_FILE" ] && check_pid "$TRANSFER_PID" && \ - ps -p $MYSQLD_PID >/dev/null 2>&1 + ps -p $WSREP_SST_OPT_PARENT >/dev/null 2>&1 do sleep 1 done - if ! ps -p $MYSQLD_PID >/dev/null 2>&1; then + if ! ps -p $WSREP_SST_OPT_PARENT >/dev/null 2>&1; then wsrep_log_error \ - "Parent mysqld process (PID: $MYSQLD_PID) terminated unexpectedly." - kill -- -$MYSQLD_PID + "Parent mysqld process (PID: $WSREP_SST_OPT_PARENT)" \ + "terminated unexpectedly." + kill -- -$WSREP_SST_OPT_PARENT sleep 1 exit 32 fi