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