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