Whamcloud - gitweb
b=21079
[fs/lustre-release.git] / lustre / tests / runracer
index fcc26ed..b67a819 100644 (file)
@@ -11,8 +11,15 @@ racer=`which racer.sh`
 [ -z "$racer" ] && echo racer is not installed && exit 1
 
 CLIENTS=${CLIENTS:-$HOSTNAME}
-RDIR=$DIR/racer
-mkdir -p $RDIR
+RACERDIRS=$@
+RACERDIRS=${RACERDIRS:-$DIR}
+echo RACERDIRS=$RACERDIRS
+for d in ${RACERDIRS}; do
+       RDIRS="$RDIRS $d/racer"
+       mkdir -p $d/racer
+#      lfs setstripe $d/racer -c -1
+done
+
 DURATION=${DURATION:-120}
 
 assert_env CLIENTS
@@ -30,17 +37,28 @@ do_racer_cleanup () {
        local INTERVAL=5
         local pids
        local rc=0
+       local TMAX
+
+       local RDIR=$1
 
        echo "DOING RACER CLEANUP ... "
 
        # Check if all processes are killed
 
        local clients=$CLIENTS
+       local num_clients=$(get_node_count ${clients//,/ })
 
+        if at_is_enabled; then
+            TMAX=$(at_max_get mds)
+        else
+            TMAX=$(lctl get_param -n timeout)
+        fi
+
+       [ $TMAX -gt $((num_clients * 60)) ] || TMAX=$((num_clients * 60))
        # 1.Let chance to racer to kill all it's processes
        # FIXME: not sure how long does it take for racer to kill all processes
        # 80 is sometimes are enough for 2 clients; sometimes it takes more than 150 sec
-       while [ $WAIT -lt 90 ]; do
+       while [ $WAIT -lt $TMAX ]; do
                running=$(do_nodes $clients "ps uax | grep $RDIR " | egrep -v "(acceptance|grep|pdsh|bash)" || true)
                [ -z "$running" ] && rc=0 && break
                echo "clients $clients are still running the racer processes. Waited $WAIT secs"
@@ -59,8 +77,8 @@ do_racer_cleanup () {
                                echo "client $C still running racer processes after $WAIT seconds. Killing $pids"
                                do_node $C "ps uax | grep $RDIR " | egrep -v "(acceptance|grep|PATH)"
                                do_node $C kill -TERM $pids || true
-                               # let processes to be killed
-                               sleep 2
+                               # let processes to be killed, there maybe many threads to be killed, so give 20 sec gap
+                               sleep 20
        # 3. Check if the processes were killed
        # exit error if the processes still exist
                                for pid in $pids; do
@@ -81,11 +99,16 @@ racer_cleanup () {
                echo $timeout killing RACERPID=$RACERPID
                kill $RACERPID || true
                sleep 2 # give chance racer to kill it's processes
-               do_racer_cleanup
+               local dir
+               for dir in $RDIRS; do
+                       do_racer_cleanup $dir
+               done
        else
                echo "Racer completed before DURATION=$DURATION expired. Cleaning up..."
                kill $TIMERPID
-               do_racer_cleanup
+               for dir in $RDIRS; do
+                       do_racer_cleanup $dir
+               done
        fi
 }
 
@@ -104,10 +127,23 @@ trap racer_timeout ALRM
 
 timer_on $((DURATION + 5))
 
-do_nodes $CLIENTS "DURATION=$DURATION $racer $RDIR" &
-RACERPID=$!
+RACERPID=""
+for rdir in $RDIRS; do
+       do_nodes $CLIENTS "DURATION=$DURATION $racer $rdir $NUM_RACER_THREADS" &
+       pid=$!
+       RACERPID="$RACERPID $pid"
+done
+
 echo RACERPID=$RACERPID
-wait $RACERPID || RC=2
+for rpid in $RACERPID; do
+       wait $rpid
+       rc=$?
+       echo "rpid=$rpid rc=$rc"
+       if [ $rc != 0 ]; then
+               RC=$((RC + 1))
+       fi
+done
+
 racer_cleanup
 echo "$0: completed $RC"
 exit $RC