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