Whamcloud - gitweb
LU-4198 clio: turn on lockless for some kind of IO
[fs/lustre-release.git] / lustre / tests / racer / racer.sh
1 #!/bin/bash
2 #set -x
3
4 DIR="$1"
5 MAX_FILES=${MAX_FILES:-20}
6 DURATION=${DURATION:-$((60*5))}
7 MDSCOUNT=${MDSCOUNT:-1}
8
9 NUM_THREADS=${NUM_THREADS:-$2}
10 NUM_THREADS=${NUM_THREADS:-3}
11
12 mkdir -p $DIR
13
14 RACER_PROGS="file_create dir_create file_rm file_rename file_link file_symlink \
15 file_list file_concat file_exec file_chown file_chmod file_mknod file_truncate \
16 file_delxattr file_getxattr file_setxattr"
17
18 if $RACER_ENABLE_REMOTE_DIRS || $RACER_ENABLE_STRIPED_DIRS; then
19         RACER_PROGS+=' dir_remote'
20 fi
21
22 if $RACER_ENABLE_MIGRATION; then
23         RACER_PROGS+=' dir_migrate'
24 fi
25
26 racer_cleanup()
27 {
28         echo "racer cleanup"
29         for P in $RACER_PROGS; do
30                 killall -q $P.sh
31         done
32         trap 0
33
34         local TOT_WAIT=0
35         local MAX_WAIT=$DURATION
36         local SHORT_WAIT=5
37
38         local rc
39         while [[ $TOT_WAIT -le $MAX_WAIT ]]; do
40                 rc=0
41                 echo sleeping $SHORT_WAIT sec ...
42                 sleep $SHORT_WAIT
43                 # this only checks whether processes exist
44                 for P in $RACER_PROGS; do
45                         killall -0 $P.sh
46                         [[ $? -eq 0 ]] && (( rc+=1 ))
47                 done
48
49                 # Kill dd processes to speedup cleanup
50                 local pids=$(ps uax | grep "$DIR" | grep dd | grep -v grep |
51                                 awk '{print $2}')
52                 for pid in $pids; do
53                         kill $pid
54                 done
55
56                 if [[ $rc -eq 0 ]]; then
57                         echo there should be NO racer processes:
58                         ps uww -C "${RACER_PROGS// /.sh,}.sh"
59                         return 0
60                 fi
61                 echo -n "Waited $(( TOT_WAIT + SHORT_WAIT)), rc=$rc "
62                 (( SHORT_WAIT+=SHORT_WAIT ))
63                 (( TOT_WAIT+=SHORT_WAIT ))
64         done
65         ps uww -C "${RACER_PROGS// /.sh,}.sh"
66         return 1
67 }
68
69 RC=0
70
71 echo "Running $0 for $DURATION seconds. CTRL-C to exit"
72 trap "
73         echo \"Cleaning up\" 
74         racer_cleanup
75         exit 0
76 " INT TERM
77
78 cd `dirname $0`
79 for N in `seq 1 $NUM_THREADS`; do
80         for P in $RACER_PROGS; do
81                 ./$P.sh $DIR $MAX_FILES &
82         done
83 done
84
85 sleep $DURATION
86 racer_cleanup || RC=$?
87
88 # Check our to see whether our test DIR is still available.
89 df $DIR
90 (( RC+=$? ))
91 [ $RC -eq 0 ] && echo "We survived $0 for $DURATION seconds."
92 exit $RC