Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / tests / replay-dual.sh
1 #!/bin/bash
2
3 set -e
4
5 # bug number:  13129 13129 6088 10124 
6 ALWAYS_EXCEPT="2     3     8    15c   $REPLAY_DUAL_EXCEPT"
7
8 SAVE_PWD=$PWD
9 PTLDEBUG=${PTLDEBUG:--1}
10 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
11 SETUP=${SETUP:-""}
12 CLEANUP=${CLEANUP:-""}
13 MOUNT_2=${MOUNT_2:-"yes"}
14 . $LUSTRE/tests/test-framework.sh
15
16 init_test_env $@
17
18 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
19
20 #
21 [ "$SLOW" = "no" ] && EXCEPT_SLOW="1 2 3 4 5 14"
22
23 build_test_filter
24
25 cleanup_and_setup_lustre
26 rm -rf $DIR/[df][0-9]*
27
28 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
29
30 test_1() {
31     touch $MOUNT1/a
32     replay_barrier $SINGLEMDS
33     touch $MOUNT2/b
34
35     fail $SINGLEMDS
36     checkstat $MOUNT2/a || return 1
37     checkstat $MOUNT1/b || return 2
38     rm $MOUNT2/a $MOUNT1/b
39     checkstat $MOUNT1/a && return 3
40     checkstat $MOUNT2/b && return 4
41     return 0
42 }
43
44 run_test 1 "|X| simple create"
45
46
47 test_2() {
48     replay_barrier $SINGLEMDS
49     mkdir $MOUNT1/adir
50
51     fail $SINGLEMDS
52     checkstat $MOUNT2/adir || return 1
53     rmdir $MOUNT2/adir
54     checkstat $MOUNT2/adir && return 2
55     return 0
56 }
57 run_test 2 "|X| mkdir adir"
58
59 test_3() {
60     replay_barrier $SINGLEMDS
61     mkdir $MOUNT1/adir
62     mkdir $MOUNT2/adir/bdir
63
64     fail $SINGLEMDS
65     checkstat $MOUNT2/adir      || return 1
66     checkstat $MOUNT1/adir/bdir || return 2
67     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
68     checkstat $MOUNT1/adir      && return 3
69     checkstat $MOUNT2/adir/bdir && return 4
70     return 0
71 }
72 run_test 3 "|X| mkdir adir, mkdir adir/bdir "
73
74 test_4() {
75     mkdir $MOUNT1/adir
76     replay_barrier $SINGLEMDS
77     mkdir $MOUNT1/adir  && return 1
78     mkdir $MOUNT2/adir/bdir
79
80     fail $SINGLEMDS
81     checkstat $MOUNT2/adir      || return 2
82     checkstat $MOUNT1/adir/bdir || return 3
83
84     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
85     checkstat $MOUNT1/adir      && return 4
86     checkstat $MOUNT2/adir/bdir && return 5
87     return 0
88 }
89 run_test 4 "|X| mkdir adir (-EEXIST), mkdir adir/bdir "
90
91
92 test_5() {
93     # multiclient version of replay_single.sh/test_8
94     mcreate $MOUNT1/a
95     multiop_bg_pause $MOUNT2/a o_tSc || return  1
96     pid=$!
97     rm -f $MOUNT1/a
98     replay_barrier $SINGLEMDS
99     kill -USR1 $pid
100     wait $pid || return 1
101
102     fail $SINGLEMDS
103     [ -e $MOUNT2/a ] && return 2
104     return 0
105 }
106 run_test 5 "open, unlink |X| close"
107
108
109 test_6() {
110     mcreate $MOUNT1/a
111     multiop_bg_pause $MOUNT2/a o_c || return 1
112     pid1=$!
113     multiop_bg_pause $MOUNT1/a o_c || return 1
114     pid2=$!
115     rm -f $MOUNT1/a
116     replay_barrier $SINGLEMDS
117     kill -USR1 $pid1
118     wait $pid1 || return 1
119
120     fail $SINGLEMDS
121     kill -USR1 $pid2
122     wait $pid2 || return 1
123     [ -e $MOUNT2/a ] && return 2
124     return 0
125 }
126 run_test 6 "open1, open2, unlink |X| close1 [fail $SINGLEMDS] close2"
127
128 test_8() {
129     replay_barrier $SINGLEMDS
130     drop_reint_reply "mcreate $MOUNT1/$tfile"    || return 1
131     fail $SINGLEMDS
132     checkstat $MOUNT2/$tfile || return 2
133     rm $MOUNT1/$tfile || return 3
134
135     return 0
136 }
137 run_test 8 "replay of resent request"
138
139 test_9() {
140     replay_barrier $SINGLEMDS
141     mcreate $MOUNT1/$tfile-1
142     mcreate $MOUNT2/$tfile-2
143     # drop first reint reply
144     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000119
145     fail $SINGLEMDS
146     do_facet $SINGLEMDS lctl set_param fail_loc=0
147
148     rm $MOUNT1/$tfile-[1,2] || return 1
149
150     return 0
151 }
152 run_test 9 "resending a replayed create"
153
154 test_10() {
155     mcreate $MOUNT1/$tfile-1
156     replay_barrier $SINGLEMDS
157     munlink $MOUNT1/$tfile-1
158     mcreate $MOUNT2/$tfile-2
159     # drop first reint reply
160     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000119
161     fail $SINGLEMDS
162     do_facet $SINGLEMDS lctl set_param fail_loc=0
163
164     checkstat $MOUNT1/$tfile-1 && return 1
165     checkstat $MOUNT1/$tfile-2 || return 2
166     rm $MOUNT1/$tfile-2
167
168     return 0
169 }
170 run_test 10 "resending a replayed unlink"
171
172 test_11() {
173     replay_barrier $SINGLEMDS
174     mcreate $MOUNT1/$tfile-1
175     mcreate $MOUNT2/$tfile-2
176     mcreate $MOUNT1/$tfile-3
177     mcreate $MOUNT2/$tfile-4
178     mcreate $MOUNT1/$tfile-5
179     # drop all reint replies for a while
180     do_facet $SINGLEMDS lctl set_param fail_loc=0x0119
181     # note that with this fail_loc set, facet_failover df will fail
182     facet_failover $SINGLEMDS
183     #sleep for while, let both clients reconnect and timeout
184     sleep $((TIMEOUT * 2))
185     do_facet $SINGLEMDS lctl set_param fail_loc=0
186
187     rm $MOUNT1/$tfile-[1-5] || return 1
188
189     return 0
190 }
191 run_test 11 "both clients timeout during replay"
192
193 test_12() {
194     replay_barrier $SINGLEMDS
195
196     multiop_bg_pause $DIR/$tfile mo_c || return 1
197     MULTIPID=$!
198
199 #define OBD_FAIL_LDLM_ENQUEUE            0x302
200     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000302
201     facet_failover $SINGLEMDS
202     do_facet $SINGLEMDS lctl set_param fail_loc=0
203     df $MOUNT || return 1
204
205     ls $DIR/$tfile
206     kill -USR1 $MULTIPID || return 3
207     wait $MULTIPID || return 4
208     $CHECKSTAT -t file $DIR/$tfile || return 2
209     rm $DIR/$tfile
210
211     return 0
212 }
213 run_test 12 "open resend timeout"
214
215 test_13() {
216     multiop_bg_pause $DIR/$tfile mo_c || return 1
217     MULTIPID=$!
218
219     replay_barrier $SINGLEMDS
220
221     kill -USR1 $MULTIPID || return 3
222     wait $MULTIPID || return 4
223
224     # drop close 
225     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000115
226     facet_failover $SINGLEMDS
227     do_facet $SINGLEMDS lctl set_param fail_loc=0
228     df $MOUNT || return 1
229
230     ls $DIR/$tfile
231     $CHECKSTAT -t file $DIR/$tfile || return 2
232     rm $DIR/$tfile
233
234     return 0
235 }
236 run_test 13 "close resend timeout"
237
238 test_14() {
239     replay_barrier $SINGLEMDS
240     createmany -o $MOUNT1/$tfile- 25
241     createmany -o $MOUNT2/$tfile-2- 1
242     createmany -o $MOUNT1/$tfile-3- 25
243     umount $MOUNT2
244
245     facet_failover $SINGLEMDS
246     # expect failover to fail due to missing client 2
247     df $MOUNT && return 1
248     sleep 1
249
250     # first 25 files should have been replayed 
251     unlinkmany $MOUNT1/$tfile- 25 || return 2
252
253     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail" 
254     return 0
255 }
256 run_test 14 "timeouts waiting for lost client during replay"
257
258 test_15a() {    # was test_15
259     replay_barrier $SINGLEMDS
260     createmany -o $MOUNT1/$tfile- 25
261     createmany -o $MOUNT2/$tfile-2- 1
262     umount $MOUNT2
263
264     facet_failover $SINGLEMDS
265     df $MOUNT || return 1
266
267     unlinkmany $MOUNT1/$tfile- 25 || return 2
268     [ -e $MOUNT1/$tfile-2-0 ] && error "$tfile-2-0 exists"
269
270     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
271     return 0
272 }
273 run_test 15a "timeout waiting for lost client during replay, 1 client completes"
274
275 test_15c() {
276     replay_barrier $SINGLEMDS
277     for ((i = 0; i < 2000; i++)); do
278         echo "data" > "$MOUNT2/${tfile}-$i" || error "create ${tfile}-$i failed"
279     done
280     
281     umount $MOUNT2
282     facet_failover $SINGLEMDS
283
284     df $MOUNT || return 1
285     
286     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
287     return 0
288 }
289 run_test 15c "remove multiple OST orphans"
290
291 test_16() {
292     replay_barrier $SINGLEMDS
293     createmany -o $MOUNT1/$tfile- 25
294     createmany -o $MOUNT2/$tfile-2- 1
295     umount $MOUNT2
296
297     facet_failover $SINGLEMDS
298     sleep $TIMEOUT
299     facet_failover $SINGLEMDS
300     df $MOUNT || return 1
301
302     unlinkmany $MOUNT1/$tfile- 25 || return 2
303
304     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
305     return 0
306
307 }
308 run_test 16 "fail MDS during recovery (3571)"
309
310 test_17() {
311     createmany -o $MOUNT1/$tfile- 25
312     createmany -o $MOUNT2/$tfile-2- 1
313
314     # Make sure the disconnect is lost
315     replay_barrier ost1
316     umount $MOUNT2
317
318     facet_failover ost1
319     sleep $TIMEOUT
320     facet_failover ost1
321     df $MOUNT || return 1
322
323     unlinkmany $MOUNT1/$tfile- 25 || return 2
324
325     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
326     return 0
327
328 }
329 run_test 17 "fail OST during recovery (3571)"
330
331 # cleanup with blocked enqueue fails until timer elapses (MDS busy), wait for it
332 export NOW=0
333
334 test_18() { # bug 3822 - evicting client with enqueued lock
335     #set -vx
336     mkdir -p $MOUNT1/$tdir
337     touch $MOUNT1/$tdir/f0
338 #define OBD_FAIL_LDLM_ENQUEUE_BLOCKED    0x30b
339     statmany -s $MOUNT1/$tdir/f 1 500 &
340     OPENPID=$!
341     NOW=`date +%s`
342     do_facet $SINGLEMDS lctl set_param fail_loc=0x8000030b  # hold enqueue
343     sleep 1
344 #define OBD_FAIL_LDLM_BL_CALLBACK        0x305
345     do_facet client lctl set_param fail_loc=0x80000305  # drop cb, evict
346     cancel_lru_locks mdc
347     usleep 500 # wait to ensure first client is one that will be evicted
348     openfile -f O_RDONLY $MOUNT2/$tdir/f0
349     wait $OPENPID
350     dmesg | grep "entering recovery in server" && \
351         error "client not evicted" || true
352     do_facet client "lctl set_param fail_loc=0"
353     do_facet $SINGLEMDS "lctl set_param fail_loc=0"
354 }
355 run_test 18 "ldlm_handle_enqueue succeeds on evicted export (3822)"
356
357 test_19() { # Bug 10991 - resend of open request does not fail assertion.
358     replay_barrier $SINGLEMDS
359     drop_ldlm_reply "createmany -o $DIR/$tfile 1" || return 1
360     fail $SINGLEMDS
361     checkstat $DIR2/${tfile}0 || return 2
362     rm $DIR/${tfile}0 || return 3
363
364     return 0
365 }
366 run_test 19 "resend of open request"
367
368 equals_msg `basename $0`: test complete, cleaning up
369 SLEEP=$((`date +%s` - $NOW))
370 [ $SLEEP -lt $TIMEOUT ] && sleep $SLEEP
371 check_and_cleanup_lustre
372 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG || true
373