5 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
6 . $LUSTRE/tests/test-framework.sh
8 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
10 racer=`which racer.sh`
11 [ -z "$racer" ] && echo racer is not installed && exit 1
13 CLIENTS=${CLIENTS:-$HOSTNAME}
15 RACERDIRS=${RACERDIRS:-$DIR}
16 echo RACERDIRS=$RACERDIRS
17 for d in ${RACERDIRS}; do
18 RDIRS="$RDIRS $d/racer"
20 # lfs setstripe $d/racer -c -1
23 DURATION=${DURATION:-120}
28 sleep $1 && kill -s ALRM $$ &
30 echo TIMERPID=$TIMERPID
43 echo "DOING RACER CLEANUP ... "
45 # Check if all processes are killed
47 local clients=$CLIENTS
49 # 1.Let chance to racer to kill all it's processes
50 # FIXME: not sure how long does it take for racer to kill all processes
51 # 80 is sometimes are enough for 2 clients; sometimes it takes more than 150 sec
52 while [ $WAIT -lt 90 ]; do
53 running=$(do_nodes $clients "ps uax | grep $RDIR " | egrep -v "(acceptance|grep|pdsh|bash)" || true)
54 [ -z "$running" ] && rc=0 && break
55 echo "clients $clients are still running the racer processes. Waited $WAIT secs"
58 [ $INTERVAL -lt 40 ] && INTERVAL=$((INTERVAL + INTERVAL))
60 WAIT=$((WAIT + INTERVAL))
63 # 2. Kill the remaining processes
64 if [ $rc -ne 0 ]; then
65 for C in ${clients//,/ } ; do
66 pids=$(do_node $C "ps uax | grep $RDIR " | egrep -v "(acceptance|grep|PATH)" | awk '{print $2}' || true)
67 if [ ! -z "$pids" ]; then
68 echo "client $C still running racer processes after $WAIT seconds. Killing $pids"
69 do_node $C "ps uax | grep $RDIR " | egrep -v "(acceptance|grep|PATH)"
70 do_node $C kill -TERM $pids || true
71 # let processes to be killed
73 # 3. Check if the processes were killed
74 # exit error if the processes still exist
76 do_node $C "ps -P $pid" && RC=1 || true
79 echo "All processes on client $C exited after $WAIT seconds. OK."
83 echo "No racer processes running after $WAIT seconds. OK."
84 wait_remote_prog $racer 10
89 if [ "$timeout" == "timeout" ]; then
90 echo $timeout killing RACERPID=$RACERPID
91 kill $RACERPID || true
92 sleep 2 # give chance racer to kill it's processes
98 echo "Racer completed before DURATION=$DURATION expired. Cleaning up..."
100 for dir in $RDIRS; do
101 do_racer_cleanup $dir
109 echo "$0: completed $RC"
114 log "Start racer on clients: $CLIENTS DURATION=$DURATION"
117 trap racer_timeout ALRM
119 timer_on $((DURATION + 5))
122 for rdir in $RDIRS; do
123 do_nodes $CLIENTS "DURATION=$DURATION $racer $rdir $NUM_RACER_THREADS" &
125 RACERPID="$RACERPID $pid"
128 echo RACERPID=$RACERPID
129 for rpid in $RACERPID; do
132 echo "rpid=$rpid rc=$rc"
133 if [ $rc != 0 ]; then
139 echo "$0: completed $RC"