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