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