Whamcloud - gitweb
LU-14789 tests: make sanity 133f and 133g working
[fs/lustre-release.git] / lustre / tests / racer / racer.sh
index 645e349..5f378bc 100755 (executable)
 #!/bin/bash
+#set -x
 
+DIR="$1"
 MAX_FILES=${MAX_FILES:-20}
-DIR=${DIR:-$1}
-DIR=${DIR:-"/mnt/lustre/racer"}
 DURATION=${DURATION:-$((60*5))}
 
 NUM_THREADS=${NUM_THREADS:-$2}
 NUM_THREADS=${NUM_THREADS:-3}
 
+RACER_MAX_CLEANUP_WAIT=${RACER_MAX_CLEANUP_WAIT:-$DURATION}
+
 mkdir -p $DIR
 
+RACER_PROGS=${RACER_PROGS:-"file_create dir_create file_rm file_rename \
+file_link file_symlink file_list file_concat file_exec file_chown \
+file_chmod file_mknod file_truncate file_delxattr file_getxattr \
+file_setxattr"}
+
+# allow e.g. RACER_EXTRA=dir_create:5,file_link:10 to launch extra tasks
+for PROG in ${RACER_EXTRA//,/ }; do
+       prog=(${PROG/:/ })
+       count=${prog[1]:-1}
+       for ((i = 0; i < count; i++)); do
+               RACER_PROGS+=" ${prog[0]}"
+       done
+done
+
+if $RACER_ENABLE_REMOTE_DIRS || $RACER_ENABLE_STRIPED_DIRS; then
+       RACER_PROGS+=' dir_remote'
+fi
+
+if $RACER_ENABLE_MIGRATION; then
+       RACER_PROGS+=' dir_migrate'
+fi
+
 racer_cleanup()
 {
-    killall file_create.sh 
-    killall dir_create.sh
-    killall file_rm.sh 
-    killall file_rename.sh 
-    killall file_link.sh 
-    killall file_symlink.sh 
-    killall file_list.sh 
-    killall file_concat.sh
-    trap 0
+       echo "racer cleanup"
+       for P in $RACER_PROGS; do
+               killall -q $P.sh
+       done
+       trap 0
+
+       local TOT_WAIT=0
+       local SHORT_WAIT=5
+
+       local rc
+       while [[ $TOT_WAIT -le $RACER_MAX_CLEANUP_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
+
+               # Kill dd processes to speedup cleanup
+               local pids=$(ps uax | grep "$DIR" | grep dd | grep -v grep |
+                               awk '{print $2}')
+               for pid in $pids; do
+                       kill $pid
+               done
+
+               if [[ $rc -eq 0 ]]; then
+                       echo there should be NO racer processes:
+                       ps uww -C "${RACER_PROGS// /.sh,}.sh"
+                       return 0
+               fi
+               (( TOT_WAIT+=SHORT_WAIT ))
+               echo -n "Waited $TOT_WAIT, rc=$rc "
+               (( SHORT_WAIT+=SHORT_WAIT ))
+       done
+       ps uww -C "${RACER_PROGS// /.sh,}.sh"
+       return 1
 }
 
+RC=0
+
 echo "Running $0 for $DURATION seconds. CTRL-C to exit"
 trap "
-    echo \"Cleaning up\" 
-    racer_cleanup
-    exit 0
-" 2 15
+       echo \"Cleaning up\" 
+       racer_cleanup
+       exit 0
+" INT TERM
 
 cd `dirname $0`
 for N in `seq 1 $NUM_THREADS`; do
-       ./file_create.sh $DIR $MAX_FILES &
-       ./dir_create.sh $DIR $MAX_FILES &
-       ./file_rename.sh $DIR $MAX_FILES &
-       ./file_link.sh $DIR $MAX_FILES &
-       ./file_symlink.sh $DIR $MAX_FILES &
-       ./file_concat.sh $DIR $MAX_FILES &
-       ./file_list.sh $DIR &
-       ./file_rm.sh $DIR $MAX_FILES &
+       for P in $RACER_PROGS; do
+               ./$P.sh $DIR $MAX_FILES &
+       done
 done
 
-sleep $DURATION;
-racer_cleanup
+sleep $DURATION
+racer_cleanup || RC=$?
+
 # Check our to see whether our test DIR is still available.
 df $DIR
-RC=$?
-if [ $RC -eq 0 ]; then
-    echo "We survived $0 for $DURATION seconds."
-fi
+(( RC+=$? ))
+[ $RC -eq 0 ] && echo "We survived $0 for $DURATION seconds."
 exit $RC