Whamcloud - gitweb
LU-357 racer test cleanup
[fs/lustre-release.git] / lustre / tests / racer / racer.sh
index 1274d02..efd3bcd 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/bash
 #!/bin/bash
+#set -x
 
 MAX_FILES=${MAX_FILES:-20}
 DIR=${DIR:-$1}
 
 MAX_FILES=${MAX_FILES:-20}
 DIR=${DIR:-$1}
@@ -10,23 +11,52 @@ NUM_THREADS=${NUM_THREADS:-3}
 
 mkdir -p $DIR
 
 
 mkdir -p $DIR
 
-RACER_PROGS="file_create dir_create file_rm file_rename file_link file_symlink
+RACER_PROGS="file_create dir_create file_rm file_rename file_link file_symlink \
 file_list file_concat"
 
 racer_cleanup()
 {
 file_list file_concat"
 
 racer_cleanup()
 {
+       echo "racer cleanup"
        for P in $RACER_PROGS; do
                killall $P.sh
        done
        trap 0
        for P in $RACER_PROGS; do
                killall $P.sh
        done
        trap 0
+
+       local TOT_WAIT=0
+       local MAX_WAIT=$DURATION
+       local SHORT_WAIT=5
+
+       local rc
+       while [[ $TOT_WAIT -le $MAX_WAIT ]]; do
+               rc=0
+               echo sleeping $SHORT_WAIT sec ...
+               sleep $SHORT_WAIT
+               # this only checks whether processes exist
+               for P in $RACER_PROGS; do
+                       killall -0 $P.sh
+                       [[ $? -eq 0 ]] && (( rc+=1 ))
+               done
+               if [[ $rc -eq 0 ]]; then
+                       echo there should be NO racer processes:
+                       ps aux | grep -E "${RACER_PROGS// /|}"
+                       return 0
+               fi
+               echo -n "Waited $(( TOT_WAIT + SHORT_WAIT)), rc=$rc "
+               (( SHORT_WAIT+=SHORT_WAIT ))
+               (( TOT_WAIT+=SHORT_WAIT ))
+       done
+       ps aux | grep -E "${RACER_PROGS// /|}"
+       return 1
 }
 
 }
 
+RC=0
+
 echo "Running $0 for $DURATION seconds. CTRL-C to exit"
 trap "
        echo \"Cleaning up\" 
        racer_cleanup
        exit 0
 echo "Running $0 for $DURATION seconds. CTRL-C to exit"
 trap "
        echo \"Cleaning up\" 
        racer_cleanup
        exit 0
-" 2 15
+" INT TERM
 
 cd `dirname $0`
 for N in `seq 1 $NUM_THREADS`; do
 
 cd `dirname $0`
 for N in `seq 1 $NUM_THREADS`; do
@@ -36,11 +66,11 @@ for N in `seq 1 $NUM_THREADS`; do
 done
 
 sleep $DURATION
 done
 
 sleep $DURATION
-racer_cleanup
+racer_cleanup || RC=$?
 
 # Check our to see whether our test DIR is still available.
 df $DIR
 
 # Check our to see whether our test DIR is still available.
 df $DIR
-RC=$?
+(( RC+=$? ))
 if [ $RC -eq 0 ]; then
     echo "We survived $0 for $DURATION seconds."
 fi
 if [ $RC -eq 0 ]; then
     echo "We survived $0 for $DURATION seconds."
 fi