Whamcloud - gitweb
LU-1573 recovery: Avoid data corruption for DIO during FOFB
[fs/lustre-release.git] / lustre / tests / lustre-rsync-test.sh
index d27e93d..b3fe03d 100644 (file)
@@ -121,6 +121,38 @@ check_diff() {
        fi
 }
 
+procs_are_stopped() {
+       local pids="$*"
+       local state
+
+       for state in $(ps -p "$pids" -o state=); do
+               if [[ "$state" != T ]]; then
+                       return 1
+               fi
+       done
+
+       return 0
+}
+
+# Send SIGSTOP to PIDs and wait up to 60 seconds for them to show a
+# stopped process state.
+stop_procs() {
+       local pids="$*"
+       local end
+
+       $KILL -SIGSTOP $pids
+       end=$((SECONDS + 60))
+       while ((SECONDS < end)); do
+               if procs_are_stopped $pids; then
+                       return 0
+               fi
+
+               sleep 1
+       done
+
+       return 1
+}
+
 # Test 1 - test basic operations
 test_1() {
     init_src
@@ -211,6 +243,7 @@ run_test 1 "Simple Replication"
 test_1a() { # LU-5005
        rm -rf $TGT/root-* 2> /dev/null
        rm -rf $DIR/root-* 2> /dev/null
+       init_src
        init_changelog
 
        # Directory create
@@ -243,6 +276,7 @@ test_1a() { # LU-5005
        stat $TGT/root-dir1 && error "Dir delete not replicated"
        stat $TGT/root-file4 && error "File delete not replicated"
 
+       cleanup_src_tgt
        fini_changelog
        rm -fr $TGT/root-*
        rm -fr $DIR/root-*
@@ -289,7 +323,7 @@ test_2b() {
 
        echo PIDs: $child_pid
        echo Stopping dbench
-       $KILL -SIGSTOP $child_pid
+       stop_procs $child_pid
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        echo Starting replication
@@ -302,7 +336,7 @@ test_2b() {
     sleep 10
 
     echo Stopping dbench
-    $KILL -SIGSTOP $child_pid
+       stop_procs $child_pid
 
        echo Starting replication
        $LRSYNC -l $LREPL_LOG -D $LRSYNC_LOG
@@ -442,7 +476,7 @@ test_4() {
         MOUNT=${DIR}/$tdir run_iozone.sh &
     sleep 30
     child_pid=$(pgrep iozone)
-    $KILL -SIGSTOP $child_pid
+       stop_procs $child_pid
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        # Replicate the changes to $TGT