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