Whamcloud - gitweb
b=3031
[fs/lustre-release.git] / lustre / tests / replay-sanity.sh
1 #!/bin/sh
2
3 set -e
4
5 #
6 # This test needs to be run on the client
7 #
8
9 LUSTRE=${LUSTRE:-`dirname $0`/..}
10 . $LUSTRE/tests/test-framework.sh
11
12 init_test_env $@
13
14 . ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
15
16 # Skip these tests
17 ALWAYS_EXCEPT="1 3"
18
19 gen_config() {
20     rm -f $XMLCONFIG
21     add_mds mds --dev $MDSDEV --size $MDSSIZE
22     if [ ! -z "$mdsfailover_HOST" ]; then
23          add_mdsfailover mds --dev $MDSDEV --size $MDSSIZE
24     fi
25     
26     add_lov lov1 mds --stripe_sz $STRIPE_BYTES \
27         --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
28     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
29     add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
30     add_client client mds --lov lov1 --path $MOUNT
31 }
32
33 build_test_filter
34
35 cleanup() {
36     # make sure we are using the primary MDS, so the config log will
37     # be able to clean up properly.
38     activemds=`facet_active mds`
39     if [ $activemds != "mds" ]; then
40         fail mds
41     fi
42     zconf_umount `hostname` $MOUNT
43     stop mds ${FORCE} $MDSLCONFARGS
44     stop ost2 ${FORCE} --dump cleanup.log
45     stop ost ${FORCE} --dump cleanup.log
46 }
47
48 if [ "$ONLY" == "cleanup" ]; then
49     sysctl -w portals.debug=0 || true
50     cleanup
51     exit
52 fi
53
54 SETUP=${SETUP:-"setup"}
55 CLEANUP=${CLEANUP:-"cleanup"}
56
57 setup() {
58     gen_config
59
60     start ost --reformat $OSTLCONFARGS 
61     start ost2 --reformat $OSTLCONFARGS 
62     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
63     start mds $MDSLCONFARGS --reformat
64     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
65 }
66
67 $SETUP
68
69 if [ "$ONLY" == "setup" ]; then
70     exit 0
71 fi
72
73 mkdir -p $DIR
74  
75 # bug 3488 - test MDS replay more intensely
76 test_1() {
77     sh rundbench 2 &
78     pid=$!
79     sleep 3
80     replay_barrier mds
81     sleep 2
82     fail mds
83     wait $PID || return 1
84 }
85 run_test 1 "fail MDS during dbench"
86
87 test_2() {
88     mkdir $DIR/$tdir
89     bonnie++ -u root -d $DIR/$tdir -s 0 -n 1 &
90     pid=$!
91     sleep 3
92     replay_barrier mds
93     sleep 2
94     fail mds
95     wait $PID || return 1
96     rm -rf $DIR/root
97 }
98 run_test 2 "fail MDS during bonnie++"
99
100 if [ $UID -ne 0 ]; then
101         RUNAS_ID="$UID"
102         RUNAS=""
103 else
104         RUNAS_ID=${RUNAS_ID:-500}
105         RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
106 fi
107
108 OLDTMPDIR=$TMPDIR
109 OLDTMP=$TMP
110 TMPDIR=/tmp
111 TMP=/tmp
112 OLDHOME=$HOME
113 [ $RUNAS_ID -ne $UID ] && HOME=/tmp
114                                                                                                                              
115 test_3() {
116     cvsroot=$DIR/${tdir}-csvroot
117     repos=${tdir}-repos
118     mkdir -p $cvsroot
119     chown $RUNAS_ID $cvsroot
120     $RUNAS cvs -d $cvsroot init || error
121
122     cd /etc/init.d
123     # some versions of cvs import exit(1) when asked to import links or
124     # files they can't read.  ignore those files.
125     TOIGNORE=$(find . -type l -printf '-I %f\n' -o \
126                     ! -perm +4 -printf '-I %f\n')
127     $RUNAS cvs -d $cvsroot import -m "nomesg" $TOIGNORE \
128             $repos vtag rtag
129
130     cd $DIR
131         mkdir -p $DIR/$repos
132     chown $RUNAS_ID $DIR/$repos
133     $RUNAS cvs -d $cvsroot co $repos
134
135     cd $DIR/$repos
136
137     for i in `seq 1 20`; do
138         $RUNAS touch ${tfile}-$i
139         $RUNAS cvs add -m 'addmsg' ${tfile}-$i
140     done
141
142     replay_barrier mds
143     $RUNAS cvs update
144     $RUNAS cvs commit -m 'nomsg' ${tfile}-*
145     cd $LUSTRE
146     fail mds
147 }
148 run_test 3 "fail MDS during cvs commit"
149
150 TMPDIR=$OLDTMPDIR
151 TMP=$OLDTMP
152 HOME=$OLDHOME
153
154 test_4() {
155     touch $DIR/$tfile-1
156     ln $DIR/$tfile-1 $DIR/$tfile-2 || return 1
157
158     replay_barrier mds
159     multiop $DIR/$tfile-2 Ouc
160     fail mds
161
162     $CHECKSTAT -t file $DIR/$tfile-1 || return 2
163     rm -rf $DIR/$tfile-*
164 }
165 run_test 4 "|X| unlink file with multiple links while open"
166
167 test_5() {
168     replay_barrier mds
169     touch $DIR/$tfile-1
170     ln $DIR/$tfile-1 $DIR/$tfile-2 || return 1
171     multiop $DIR/$tfile-2 Ouc
172
173     fail mds
174
175     $CHECKSTAT -t file $DIR/$tfile-1 || return 2
176     rm -rf $DIR/$tfile-*
177 }
178 run_test 5 "|X| unlink file with multiple links while open"
179
180 test_6() {
181     touch $DIR/$tfile-1
182     ln $DIR/$tfile-1 $DIR/$tfile-2
183
184     replay_barrier mds
185     multiop $DIR/$tfile-1 O_uc &
186     MULTIPID=$!
187     multiop $DIR/$tfile-2 Ouc
188     usleep 500
189     fail mds
190
191     kill -USR1 $MULTIPID
192     wait $MUTLIPID || return 1
193
194     [ -e $DIR/$tfile-1 ] && return 2
195     [ -e $DIR/$tfile-2 ] && return 3
196     return 0
197 }
198 run_test 6 "|X| open-unlink file with multiple links"
199
200 test_7() {
201     replay_barrier mds
202     touch $DIR/$tfile-1
203     ln $DIR/$tfile-1 $DIR/$tfile-2
204     multiop $DIR/$tfile-1 O_uc &
205     MULTIPID=$!
206
207     multiop $DIR/$tfile-2 Ouc
208     usleep 500
209
210     kill -USR1 $MULTIPID
211     wait $MUTLIPID || return 1
212     fail mds
213
214     [ -e $DIR/$tfile-1 ] && return 2
215     [ -e $DIR/$tfile-2 ] && return 3
216     return 0
217 }
218 run_test 7 "|X| open-unlink file with multiple links"
219
220 test_8() {
221     replay_barrier mds
222     opendirunlink $DIR/$tdir $DIR/$tdir || return 1
223     fail mds
224     $CHECKSTAT -a $DIR/$tdir || return 2
225 }
226 run_test 8 "|X| remove of open directory"
227
228 check_kernel_version() {
229     VERSION_FILE=/proc/fs/lustre/kernel_version
230     WANT_VER=$1
231     [ ! -f $VERSION_FILE ] && echo "can't find kernel version" && return 1
232     GOT_VER=`cat $VERSION_FILE`
233     [ $GOT_VER -ge $WANT_VER ] && return 0
234     log "test needs at least kernel version $WANT_VER, running $GOT_VER"
235     return 1
236 }
237
238 test_9() {
239     check_kernel_version 34 || return 0
240     replay_barrier mds
241     openfilleddirunlink $DIR/$tdir || return 1
242     fail mds
243 }
244 run_test 9 "|X| remove of open non-empty directory"
245
246 equals_msg test complete, cleaning up
247 $CLEANUP
248