Whamcloud - gitweb
b=3899
[fs/lustre-release.git] / lustre / tests / replay-dual.sh
1 #!/bin/sh
2
3 set -e
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
7
8 init_test_env $@
9
10 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
11
12 gen_config() {
13     rm -f $XMLCONFIG
14     if [ "$MDSCOUNT" -gt 1 ]; then
15         add_lmv lmv1
16         for mds in `mds_list`; do
17             MDSDEV=$TMP/${mds}-`hostname`
18             add_mds $mds --dev $MDSDEV --size $MDSSIZE  --lmv lmv1
19         done
20         add_lov_to_lmv lov1 lmv1 --stripe_sz $STRIPE_BYTES \
21             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
22         MDS=lmv1
23     else
24         add_mds mds1 --dev $MDSDEV --size $MDSSIZE
25         add_lov lov1 mds1 --stripe_sz $STRIPE_BYTES \
26             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
27         MDS=mds1_svc
28
29     fi
30
31     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
32     add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
33     add_client client --mds ${MDS} --lov lov1 --path $MOUNT
34 }
35
36
37
38 build_test_filter
39
40 SETUP=${SETUP:-"setup"}
41 CLEANUP=${CLEANUP:-"cleanup"}
42
43 cleanup() {
44     # make sure we are using the primary MDS, so the config log will
45     # be able to clean up properly.
46     activemds=`facet_active mds1`
47     if [ $activemds != "mds1" ]; then
48         fail mds1
49     fi
50
51     umount $MOUNT2 || true
52     umount $MOUNT || true
53     rmmod llite
54     for mds in `mds_list`; do
55         stop $mds ${FORCE} $MDSLCONFARGS
56     done
57     stop ost2 ${FORCE}
58     stop ost ${FORCE}  --dump cleanup-dual.log
59 }
60
61 if [ "$ONLY" == "cleanup" ]; then
62     sysctl -w portals.debug=0
63     cleanup
64     exit
65 fi
66
67 setup() {
68     gen_config
69     start ost --reformat $OSTLCONFARGS 
70     PINGER=`cat /proc/fs/lustre/pinger`
71
72     if [ "$PINGER" != "on" ]; then
73         echo "ERROR: Lustre must be built with --enable-pinger for replay-dual"
74         stop ost
75         exit 1
76     fi
77
78     start ost2 --reformat $OSTLCONFARGS 
79     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
80     for mds in `mds_list`; do
81         start $mds --reformat $MDSLCONFARGS
82     done
83     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
84     grep " $MOUNT2 " /proc/mounts || zconf_mount `hostname` $MOUNT2
85
86     echo $TIMEOUT > /proc/sys/lustre/timeout
87     echo $UPCALL > /proc/sys/lustre/upcall
88 }
89
90 $SETUP
91 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
92
93
94 test_1() {
95     touch $MOUNT1/a
96     replay_barrier mds1
97     touch $MOUNT2/b
98
99     fail mds1
100     checkstat $MOUNT2/a || return 1
101     checkstat $MOUNT1/b || return 2
102     rm $MOUNT2/a $MOUNT1/b
103     checkstat $MOUNT1/a && return 3
104     checkstat $MOUNT2/b && return 4
105     return 0
106 }
107
108 run_test 1 "|X| simple create"
109
110
111 test_2() {
112     replay_barrier mds1
113     mkdir $MOUNT1/adir
114
115     fail mds1
116     checkstat $MOUNT2/adir || return 1
117     rmdir $MOUNT2/adir
118     checkstat $MOUNT2/adir && return 2
119     return 0
120 }
121
122 run_test 2 "|X| mkdir adir"
123
124 test_3() {
125     replay_barrier mds1
126     mkdir $MOUNT1/adir
127     mkdir $MOUNT2/adir/bdir
128
129     fail mds1
130     checkstat $MOUNT2/adir      || return 1
131     checkstat $MOUNT1/adir/bdir || return 2
132     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
133     checkstat $MOUNT1/adir      && return 3
134     checkstat $MOUNT2/adir/bdir && return 4
135     return 0
136 }
137
138 run_test 3 "|X| mkdir adir, mkdir adir/bdir "
139
140 test_4() {
141     mkdir $MOUNT1/adir
142     replay_barrier mds1
143     mkdir $MOUNT1/adir  && return 1
144     mkdir $MOUNT2/adir/bdir
145
146     fail mds1
147     checkstat $MOUNT2/adir      || return 2
148     checkstat $MOUNT1/adir/bdir || return 3
149
150     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
151     checkstat $MOUNT1/adir      && return 4
152     checkstat $MOUNT2/adir/bdir && return 5
153     return 0
154 }
155
156 run_test 4 "|X| mkdir adir (-EEXIST), mkdir adir/bdir "
157
158
159 test_5() {
160     # multiclient version of replay_single.sh/test_8
161     mcreate $MOUNT1/a
162     multiop $MOUNT2/a o_tSc &
163     pid=$!
164     # give multiop a chance to open
165     sleep 1 
166     rm -f $MOUNT1/a
167     replay_barrier mds1
168     kill -USR1 $pid
169     wait $pid || return 1
170
171     fail mds1
172     [ -e $MOUNT2/a ] && return 2
173     return 0
174 }
175 run_test 5 "open, unlink |X| close"
176
177
178 test_6() {
179     mcreate $MOUNT1/a
180     multiop $MOUNT2/a o_c &
181     pid1=$!
182     multiop $MOUNT1/a o_c &
183     pid2=$!
184     # give multiop a chance to open
185     sleep 1 
186     rm -f $MOUNT1/a
187     replay_barrier mds1
188     kill -USR1 $pid1
189     wait $pid1 || return 1
190
191     fail mds1
192     kill -USR1 $pid2
193     wait $pid2 || return 1
194     [ -e $MOUNT2/a ] && return 2
195     return 0
196 }
197 run_test 6 "open1, open2, unlink |X| close1 [fail mds] close2"
198
199 test_6b() {
200     mcreate $MOUNT1/a
201     multiop $MOUNT2/a o_c &
202     pid1=$!
203     multiop $MOUNT1/a o_c &
204     pid2=$!
205     # give multiop a chance to open
206     sleep 1
207     rm -f $MOUNT1/a
208     replay_barrier mds1
209     kill -USR1 $pid2
210     wait $pid2 || return 1
211
212     fail mds1
213     kill -USR1 $pid1
214     wait $pid1 || return 1
215     [ -e $MOUNT2/a ] && return 2
216     return 0
217 }
218 run_test 6b "open1, open2, unlink |X| close2 [fail mds] close1"
219
220 test_7() {
221     replay_barrier mds1
222     createmany -o $MOUNT1/$tfile- 25
223     createmany -o $MOUNT2/$tfile-2- 1
224     createmany -o $MOUNT1/$tfile-3- 25
225     umount $MOUNT2
226
227     facet_failover mds1
228     # expect failover to fail
229     df $MOUNT && return 1
230
231 #   3313 - current fix for 3313 prevents any reply here
232 #    unlinkmany $MOUNT1/$tfile- 25 || return 2
233
234     zconf_mount `hostname` $MOUNT2
235     return 0
236 }
237 run_test 7 "timeouts waiting for lost client during replay"
238
239
240 test_8() {
241     replay_barrier mds1
242     drop_reint_reply "mcreate $MOUNT1/$tfile"    || return 1
243     fail mds1
244     checkstat $MOUNT2/$tfile || return 2
245     rm $MOUNT1/$tfile || return 3
246
247     return 0
248 }
249 run_test 8 "replay of resent request"
250
251 test_9() {
252     replay_barrier mds1
253     mcreate $MOUNT1/$tfile-1
254     mcreate $MOUNT2/$tfile-2
255     # drop first reint reply
256     sysctl -w lustre.fail_loc=0x80000119
257     fail mds1
258     sysctl -w lustre.fail_loc=0
259
260     rm $MOUNT1/$tfile-[1,2] || return 1
261
262     return 0
263 }
264 run_test 9 "resending a replayed create"
265
266 test_10() {
267     mcreate $MOUNT1/$tfile-1
268     replay_barrier mds1
269     munlink $MOUNT1/$tfile-1
270     mcreate $MOUNT2/$tfile-2
271     # drop first reint reply
272     sysctl -w lustre.fail_loc=0x80000119
273     fail mds1
274     sysctl -w lustre.fail_loc=0
275
276     checkstat $MOUNT1/$tfile-1 && return 1
277     checkstat $MOUNT1/$tfile-2 || return 2
278     rm $MOUNT1/$tfile-2
279
280     return 0
281 }
282 run_test 10 "resending a replayed unlink"
283
284 test_11() {
285     replay_barrier mds1
286     mcreate $MOUNT1/$tfile-1
287     mcreate $MOUNT2/$tfile-2
288     mcreate $MOUNT1/$tfile-3
289     mcreate $MOUNT2/$tfile-4
290     mcreate $MOUNT1/$tfile-5
291     # drop all reint replies for a while
292     sysctl -w lustre.fail_loc=0x0119
293     facet_failover mds1
294     #sleep for while, let both clients reconnect and timeout
295     sleep $((TIMEOUT * 2))
296     sysctl -w lustre.fail_loc=0
297
298     rm $MOUNT1/$tfile-[1-5] || return 1
299
300     return 0
301 }
302 run_test 11 "both clients timeout during replay"
303
304 test_12() {
305     replay_barrier mds1
306
307     multiop $DIR/$tfile mo_c &
308     MULTIPID=$!
309     sleep 5
310
311     # drop first enqueue
312     sysctl -w lustre.fail_loc=0x80000302
313     facet_failover mds1
314     df $MOUNT || return 1
315     sysctl -w lustre.fail_loc=0
316
317     ls $DIR/$tfile
318     $CHECKSTAT -t file $DIR/$tfile || return 2
319     kill -USR1 $MULTIPID || return 3
320     wait $MULTIPID || return 4
321     rm $DIR/$tfile
322
323     return 0
324 }
325 run_test 12 "open resend timeout"
326
327 test_13() {
328     multiop $DIR/$tfile mo_c &
329     MULTIPID=$!
330     sleep 5
331
332     replay_barrier mds1
333
334     kill -USR1 $MULTIPID || return 3
335     wait $MULTIPID || return 4
336
337     # drop close 
338     sysctl -w lustre.fail_loc=0x80000115
339     facet_failover mds1
340     df $MOUNT || return 1
341     sysctl -w lustre.fail_loc=0
342
343     ls $DIR/$tfile
344     $CHECKSTAT -t file $DIR/$tfile || return 2
345     rm $DIR/$tfile
346
347     return 0
348 }
349 run_test 13 "close resend timeout"
350
351 test_20 () {
352     replay_barrier mds1
353     multiop $MOUNT2/$tfile O_c &
354     pid2=$!
355     multiop $MOUNT1/$tfile O_c &
356     pid1=$!
357     # give multiop a chance to open
358     sleep 1 
359     kill -USR1 $pid2
360     kill -USR1 $pid1
361     sleep 1
362     umount $MOUNT2
363     facet_failover mds1
364     df || df ||  return 1
365     zconf_mount `hostname` $MOUNT2
366 }
367 run_test 20 "replay open, Abort recovery, don't assert (3892)"
368
369 if [ "$ONLY" != "setup" ]; then
370         equals_msg test complete, cleaning up
371         $CLEANUP
372 fi