Whamcloud - gitweb
ac0bc1111138ac0e46ab76b15c9cfa6561ef51a4
[fs/lustre-release.git] / lustre / tests / replay-dual.sh
1 #!/bin/bash
2 # -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
3 # vim:shiftwidth=4:softtabstop=4:tabstop=4:
4
5 set -e
6
7 # bug number:  LU-2012 10124
8 ALWAYS_EXCEPT="14b     15c   $REPLAY_DUAL_EXCEPT"
9
10 SAVE_PWD=$PWD
11 PTLDEBUG=${PTLDEBUG:--1}
12 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
13 SETUP=${SETUP:-""}
14 CLEANUP=${CLEANUP:-""}
15 MOUNT_2=${MOUNT_2:-"yes"}
16 export MULTIOP=${MULTIOP:-multiop}
17 . $LUSTRE/tests/test-framework.sh
18
19 init_test_env $@
20 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
21 init_logging
22
23 remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
24
25 [ "$SLOW" = "no" ] && EXCEPT_SLOW="21b"
26
27 [[ $(facet_fstype $SINGLEMDS) == zfs ]] &&
28 # bug number for skipped test:        LU-2230
29         ALWAYS_EXCEPT="$ALWAYS_EXCEPT 21b"
30
31 build_test_filter
32
33 check_and_setup_lustre
34 MOUNTED=$(mounted_lustre_filesystems)
35 if ! $(echo $MOUNTED' ' | grep -w -q $MOUNT2' '); then
36     zconf_mount $HOSTNAME $MOUNT2
37     MOUNTED2=yes
38 fi
39
40 assert_DIR
41 rm -rf $DIR/[df][0-9]*
42
43 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
44
45 # if there is no CLIENT1 defined, some tests can be ran on localhost
46 CLIENT1=${CLIENT1:-$HOSTNAME}
47 # if CLIENT2 doesn't exist then use CLIENT1 instead
48 # All tests should use CLIENT2 with MOUNT2 only therefore it will work if
49 # $CLIENT2 == CLIENT1
50 # Exception is the test which need two separate nodes
51 CLIENT2=${CLIENT2:-$CLIENT1}
52
53 # LU-482 Avert LVM and VM inability to flush caches in pre .33 kernels
54 if [ $LINUX_VERSION_CODE -lt $(version_code 2.6.33) ]; then
55         sync
56         do_facet $SINGLEMDS "sync; sleep 10; sync; sleep 10; sync"
57 fi
58
59 LU482_FAILED=$(mktemp -u $TMP/$TESTSUITE.lu482.XXXXXX)
60 test_0a() {
61         echo "Check file is LU482_FAILED=$LU482_FAILED"
62         touch $MOUNT2/$tfile-A # force sync FLD/SEQ update before barrier
63         replay_barrier $SINGLEMDS
64 #define OBD_FAIL_PTLRPC_FINISH_REPLAY | OBD_FAIL_ONCE
65         touch $MOUNT2/$tfile
66         createmany -o $MOUNT1/$tfile- 50
67         $LCTL set_param fail_loc=0x80000514
68         facet_failover $SINGLEMDS
69         [ -f "$LU482_FAILED" ] && skip "LU-482 failure" && return 0
70         client_up || return 1
71         umount -f $MOUNT2
72         client_up || return 1
73         zconf_mount `hostname` $MOUNT2 || error "mount2 fais"
74         unlinkmany $MOUNT1/$tfile- 50 || return 2
75         rm $MOUNT2/$tfile || return 3
76         rm $MOUNT2/$tfile-A || return 4
77 }
78 run_test 0a "expired recovery with lost client"
79
80 if [ -f "$LU482_FAILED" ]; then
81         log "Found check file $LU482_FAILED, aborting test script"
82         rm -vf "$LU482_FAILED"
83         complete $SECONDS
84         do_nodes $CLIENTS umount -f $MOUNT2 || true
85         do_nodes $CLIENTS umount -f $MOUNT || true
86         # copied from stopall, but avoid the MDS recovery
87     for num in `seq $OSTCOUNT`; do
88         stop ost$num -f
89         rm -f $TMP/ost${num}active
90     done
91     if ! combined_mgs_mds ; then
92         stop mgs
93     fi
94
95         exit_status
96 fi
97
98 test_0b() {
99     replay_barrier $SINGLEMDS
100     touch $MOUNT2/$tfile
101     touch $MOUNT1/$tfile-2
102     umount $MOUNT2
103     facet_failover $SINGLEMDS
104     umount -f $MOUNT1
105     zconf_mount `hostname` $MOUNT1 || error "mount1 fais"
106     zconf_mount `hostname` $MOUNT2 || error "mount2 fais"
107     # it is uncertain if file-2 exists or not, remove it if it does
108     checkstat $MOUNT1/$tfile-2 && rm $MOUNT1/$tfile-2
109     checkstat $MOUNT2/$tfile && return 2
110     return 0
111 }
112 run_test 0b "lost client during waiting for next transno"
113
114 test_1() {
115     touch $MOUNT1/a
116     replay_barrier $SINGLEMDS
117     touch $MOUNT2/b
118
119     fail $SINGLEMDS
120     checkstat $MOUNT2/a || return 1
121     checkstat $MOUNT1/b || return 2
122     rm $MOUNT2/a $MOUNT1/b
123     checkstat $MOUNT1/a && return 3
124     checkstat $MOUNT2/b && return 4
125     return 0
126 }
127
128 run_test 1 "|X| simple create"
129
130
131 test_2() {
132     replay_barrier $SINGLEMDS
133     mkdir $MOUNT1/adir
134
135     fail $SINGLEMDS
136     checkstat $MOUNT2/adir || return 1
137     rmdir $MOUNT2/adir
138     checkstat $MOUNT2/adir && return 2
139     return 0
140 }
141 run_test 2 "|X| mkdir adir"
142
143 test_3() {
144     replay_barrier $SINGLEMDS
145     mkdir $MOUNT1/adir
146     mkdir $MOUNT2/adir/bdir
147
148     fail $SINGLEMDS
149     checkstat $MOUNT2/adir      || return 1
150     checkstat $MOUNT1/adir/bdir || return 2
151     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
152     checkstat $MOUNT1/adir      && return 3
153     checkstat $MOUNT2/adir/bdir && return 4
154     return 0
155 }
156 run_test 3 "|X| mkdir adir, mkdir adir/bdir "
157
158 test_4() {
159     mkdir $MOUNT1/adir
160     replay_barrier $SINGLEMDS
161     mkdir $MOUNT1/adir  && return 1
162     mkdir $MOUNT2/adir/bdir
163
164     fail $SINGLEMDS
165     checkstat $MOUNT2/adir      || return 2
166     checkstat $MOUNT1/adir/bdir || return 3
167
168     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
169     checkstat $MOUNT1/adir      && return 4
170     checkstat $MOUNT2/adir/bdir && return 5
171     return 0
172 }
173 run_test 4 "|X| mkdir adir (-EEXIST), mkdir adir/bdir "
174
175
176 test_5() {
177     # multiclient version of replay_single.sh/test_8
178     mcreate $MOUNT1/a
179     multiop_bg_pause $MOUNT2/a o_tSc || return  1
180     pid=$!
181     rm -f $MOUNT1/a
182     replay_barrier $SINGLEMDS
183     kill -USR1 $pid
184     wait $pid || return 1
185
186     fail $SINGLEMDS
187     [ -e $MOUNT2/a ] && return 2
188     return 0
189 }
190 run_test 5 "open, unlink |X| close"
191
192
193 test_6() {
194     mcreate $MOUNT1/a
195     multiop_bg_pause $MOUNT2/a o_c || return 1
196     pid1=$!
197     multiop_bg_pause $MOUNT1/a o_c || return 1
198     pid2=$!
199     rm -f $MOUNT1/a
200     replay_barrier $SINGLEMDS
201     kill -USR1 $pid1
202     wait $pid1 || return 1
203
204     fail $SINGLEMDS
205     kill -USR1 $pid2
206     wait $pid2 || return 1
207     [ -e $MOUNT2/a ] && return 2
208     return 0
209 }
210 run_test 6 "open1, open2, unlink |X| close1 [fail $SINGLEMDS] close2"
211
212 test_8() {
213     replay_barrier $SINGLEMDS
214     drop_reint_reply "mcreate $MOUNT1/$tfile"    || return 1
215     fail $SINGLEMDS
216     checkstat $MOUNT2/$tfile || return 2
217     rm $MOUNT1/$tfile || return 3
218
219     return 0
220 }
221 run_test 8 "replay of resent request"
222
223 test_9() {
224     replay_barrier $SINGLEMDS
225     mcreate $MOUNT1/$tfile-1
226     mcreate $MOUNT2/$tfile-2
227     # drop first reint reply
228     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000119
229     fail $SINGLEMDS
230     do_facet $SINGLEMDS lctl set_param fail_loc=0
231
232     rm $MOUNT1/$tfile-[1,2] || return 1
233
234     return 0
235 }
236 run_test 9 "resending a replayed create"
237
238 test_10() {
239     mcreate $MOUNT1/$tfile-1
240     replay_barrier $SINGLEMDS
241     munlink $MOUNT1/$tfile-1
242     mcreate $MOUNT2/$tfile-2
243     # drop first reint reply
244     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000119
245     fail $SINGLEMDS
246     do_facet $SINGLEMDS lctl set_param fail_loc=0
247
248     checkstat $MOUNT1/$tfile-1 && return 1
249     checkstat $MOUNT1/$tfile-2 || return 2
250     rm $MOUNT1/$tfile-2
251
252     return 0
253 }
254 run_test 10 "resending a replayed unlink"
255
256 test_11() {
257     replay_barrier $SINGLEMDS
258     mcreate $MOUNT1/$tfile-1
259     mcreate $MOUNT2/$tfile-2
260     mcreate $MOUNT1/$tfile-3
261     mcreate $MOUNT2/$tfile-4
262     mcreate $MOUNT1/$tfile-5
263     # drop all reint replies for a while
264     do_facet $SINGLEMDS lctl set_param fail_loc=0x0119
265     # note that with this fail_loc set, facet_failover df will fail
266     facet_failover $SINGLEMDS
267     #sleep for while, let both clients reconnect and timeout
268     sleep $((TIMEOUT * 2))
269     do_facet $SINGLEMDS lctl set_param fail_loc=0
270
271     rm $MOUNT1/$tfile-[1-5] || return 1
272
273     return 0
274 }
275 run_test 11 "both clients timeout during replay"
276
277 test_12() {
278     replay_barrier $SINGLEMDS
279
280     multiop_bg_pause $DIR/$tfile mo_c || return 1
281     MULTIPID=$!
282
283 #define OBD_FAIL_LDLM_ENQUEUE_NET                       0x302
284     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000302
285     facet_failover $SINGLEMDS
286     do_facet $SINGLEMDS lctl set_param fail_loc=0
287     clients_up || return 1
288
289     ls $DIR/$tfile
290     kill -USR1 $MULTIPID || return 3
291     wait $MULTIPID || return 4
292     $CHECKSTAT -t file $DIR/$tfile || return 2
293     rm $DIR/$tfile
294
295     return 0
296 }
297 run_test 12 "open resend timeout"
298
299 test_13() {
300     multiop_bg_pause $DIR/$tfile mo_c || return 1
301     MULTIPID=$!
302
303     replay_barrier $SINGLEMDS
304
305     kill -USR1 $MULTIPID || return 3
306     wait $MULTIPID || return 4
307
308     # drop close
309     do_facet $SINGLEMDS lctl set_param fail_loc=0x80000115
310     facet_failover $SINGLEMDS
311     do_facet $SINGLEMDS lctl set_param fail_loc=0
312     clients_up || return 1
313
314     ls $DIR/$tfile
315     $CHECKSTAT -t file $DIR/$tfile || return 2
316     rm $DIR/$tfile
317
318     return 0
319 }
320 run_test 13 "close resend timeout"
321
322 # test 14a removed after 18143 because it shouldn't fail anymore and do the same
323 # as test_15a
324
325 test_14b() {
326         wait_mds_ost_sync
327         wait_delete_completed
328
329         local BEFOREUSED=$(df -P $DIR | tail -1 | awk '{ print $3 }')
330
331         mkdir -p $MOUNT1/$tdir
332         $SETSTRIPE -i 0 $MOUNT1/$tdir
333         replay_barrier $SINGLEMDS
334         createmany -o $MOUNT1/$tdir/$tfile- 5
335
336         $SETSTRIPE -i 0 $MOUNT2/$tfile-2
337         dd if=/dev/zero of=$MOUNT2/$tfile-2 bs=1M count=5
338         createmany -o $MOUNT1/$tdir/$tfile-3- 5
339         umount $MOUNT2
340
341         fail $SINGLEMDS
342         wait_recovery_complete $SINGLEMDS || error "MDS recovery not done"
343
344         # first set of files should have been replayed
345         unlinkmany $MOUNT1/$tdir/$tfile- 5 || error "first unlinks failed"
346         unlinkmany $MOUNT1/$tdir/$tfile-3- 5 || error "second unlinks failed"
347
348         zconf_mount $HOSTNAME $MOUNT2 || error "mount $MOUNT2 failed"
349         [ -f $MOUNT2/$tfile-2 ] && error "$MOUNT2/$tfile-2 exists!"
350
351         wait_mds_ost_sync || error "wait_mds_ost_sync failed"
352         wait_delete_completed || error "wait_delete_complete failed"
353
354         local AFTERUSED=$(df -P $DIR | tail -1 | awk '{ print $3 }')
355         log "before $BEFOREUSED, after $AFTERUSED"
356         # leave some margin for some files/dirs to be modified (OI, llog, etc)
357         [ $AFTERUSED -gt $((BEFOREUSED + 128)) ] &&
358                 error "after $AFTERUSED > before $BEFOREUSED" || true
359 }
360 run_test 14b "delete ost orphans if gap occured in objids due to VBR"
361
362 test_15a() { # was test_15
363     replay_barrier $SINGLEMDS
364     createmany -o $MOUNT1/$tfile- 25
365     createmany -o $MOUNT2/$tfile-2- 1
366     umount $MOUNT2
367
368     fail $SINGLEMDS
369
370     unlinkmany $MOUNT1/$tfile- 25 || return 2
371     [ -e $MOUNT1/$tfile-2-0 ] && error "$tfile-2-0 exists"
372
373     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
374     return 0
375 }
376 run_test 15a "timeout waiting for lost client during replay, 1 client completes"
377
378 test_15c() {
379     replay_barrier $SINGLEMDS
380     for ((i = 0; i < 2000; i++)); do
381         echo "data" > "$MOUNT2/${tfile}-$i" || error "create ${tfile}-$i failed"
382     done
383     umount $MOUNT2
384
385     fail $SINGLEMDS
386
387     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
388     return 0
389 }
390 run_test 15c "remove multiple OST orphans"
391
392 test_16() {
393     replay_barrier $SINGLEMDS
394     createmany -o $MOUNT1/$tfile- 25
395     createmany -o $MOUNT2/$tfile-2- 1
396     umount $MOUNT2
397
398     facet_failover $SINGLEMDS
399     sleep $TIMEOUT
400     fail $SINGLEMDS
401
402     unlinkmany $MOUNT1/$tfile- 25 || return 2
403
404     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
405     return 0
406
407 }
408 run_test 16 "fail MDS during recovery (3571)"
409
410 test_17() {
411     remote_ost_nodsh && skip "remote OST with nodsh" && return 0
412
413     createmany -o $MOUNT1/$tfile- 25
414     createmany -o $MOUNT2/$tfile-2- 1
415
416     # Make sure the disconnect is lost
417     replay_barrier ost1
418     umount $MOUNT2
419
420     facet_failover ost1
421     sleep $TIMEOUT
422     fail ost1
423
424     unlinkmany $MOUNT1/$tfile- 25 || return 2
425
426     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
427     return 0
428
429 }
430 run_test 17 "fail OST during recovery (3571)"
431
432 # cleanup with blocked enqueue fails until timer elapses (MDS busy), wait for it
433 export NOW=0
434
435 test_18() { # bug 3822 - evicting client with enqueued lock
436     #set -vx
437     mkdir -p $MOUNT1/$tdir
438     touch $MOUNT1/$tdir/f0
439 #define OBD_FAIL_LDLM_ENQUEUE_BLOCKED    0x30b
440     statmany -s $MOUNT1/$tdir/f 1 500 &
441     OPENPID=$!
442     NOW=`date +%s`
443     do_facet $SINGLEMDS lctl set_param fail_loc=0x8000030b  # hold enqueue
444     sleep 1
445 #define OBD_FAIL_LDLM_BL_CALLBACK_NET                   0x305
446     do_facet client lctl set_param fail_loc=0x80000305  # drop cb, evict
447     cancel_lru_locks mdc
448     usleep 500 # wait to ensure first client is one that will be evicted
449     openfile -f O_RDONLY $MOUNT2/$tdir/f0
450     wait $OPENPID
451     dmesg | grep "entering recovery in server" && \
452         error "client not evicted" || true
453     do_facet client "lctl set_param fail_loc=0"
454     do_facet $SINGLEMDS "lctl set_param fail_loc=0"
455 }
456 run_test 18 "ldlm_handle_enqueue succeeds on evicted export (3822)"
457
458 test_19() { # Bug 10991 - resend of open request does not fail assertion.
459     replay_barrier $SINGLEMDS
460     drop_ldlm_reply "createmany -o $DIR/$tfile 1" || return 1
461     fail $SINGLEMDS
462     checkstat $DIR2/${tfile}0 || return 2
463     rm $DIR/${tfile}0 || return 3
464
465     return 0
466 }
467 run_test 19 "resend of open request"
468
469 test_20() { #16389
470     BEFORE=`date +%s`
471     replay_barrier $SINGLEMDS
472     touch $MOUNT1/a
473     touch $MOUNT2/b
474     umount $MOUNT2
475     fail $SINGLEMDS
476     rm $MOUNT1/a
477     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
478     TIER1=$((`date +%s` - BEFORE))
479     BEFORE=`date +%s`
480     replay_barrier $SINGLEMDS
481     touch $MOUNT1/a
482     touch $MOUNT2/b
483     umount $MOUNT2
484     fail $SINGLEMDS
485     rm $MOUNT1/a
486     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
487     TIER2=$((`date +%s` - BEFORE))
488     [ $TIER2 -ge $((TIER1 * 2)) ] && \
489         error "recovery time is growing $TIER2 > $TIER1"
490     return 0
491 }
492 run_test 20 "recovery time is not increasing"
493
494 # commit on sharing tests
495 test_21a() {
496     local param_file=$TMP/$tfile-params
497
498         save_lustre_params $SINGLEMDS "mdt.*.commit_on_sharing" > $param_file
499     do_facet $SINGLEMDS lctl set_param mdt.*.commit_on_sharing=1
500     touch  $MOUNT1/$tfile-1
501     mv  $MOUNT2/$tfile-1 $MOUNT2/$tfile-2
502     mv  $MOUNT1/$tfile-2 $MOUNT1/$tfile-3
503     replay_barrier_nosync $SINGLEMDS
504     umount $MOUNT2
505
506     facet_failover $SINGLEMDS
507
508     # all renames are replayed
509     unlink  $MOUNT1/$tfile-3 || return 2
510
511     zconf_mount `hostname` $MOUNT2 || error "mount $MOUNT2 fail"
512
513     do_facet $SINGLEMDS lctl set_param mdt.*.commit_on_sharing=0
514     rm -rf $MOUNT1/$tfile-*
515     restore_lustre_params < $param_file
516     rm -f $param_file
517     return 0
518 }
519 run_test 21a "commit on sharing"
520
521 test_21b_sub () {
522     local mds=$1 
523     do_node $CLIENT1 rm -f $MOUNT1/$tfile-*
524
525     do_facet $mds sync
526     do_node $CLIENT1 touch  $MOUNT1/$tfile-1
527     do_node $CLIENT2 mv  $MOUNT1/$tfile-1 $MOUNT1/$tfile-2
528     do_node $CLIENT1 mv  $MOUNT1/$tfile-2 $MOUNT1/$tfile-3
529
530     replay_barrier_nosync $mds
531     shutdown_client $CLIENT2 $MOUNT1
532
533     facet_failover $mds
534
535     # were renames replayed?
536     local rc=0
537     echo UNLINK $MOUNT1/$tfile-3 
538     do_node $CLIENT1 unlink  $MOUNT1/$tfile-3 || \
539         { echo "unlink $tfile-3 fail!" && rc=1; }
540
541     boot_node $CLIENT2
542     zconf_mount_clients $CLIENT2 $MOUNT1 || error "mount $CLIENT2 $MOUNT1 fail" 
543
544     return $rc
545 }
546
547 test_21b() {
548     [ -z "$CLIENTS" ] && skip "Need two or more clients." && return
549     [ $CLIENTCOUNT -lt 2 ] && \
550         { skip "Need two or more clients, have $CLIENTCOUNT" && return; }
551
552     if [ "$FAILURE_MODE" = "HARD" ] &&  mixed_mdt_devs; then
553         skip "Several mdt services on one mds node are used with FAILURE_MODE=$FAILURE_MODE. "
554         return 0
555     fi
556
557
558     zconf_umount_clients $CLIENTS $MOUNT2
559     zconf_mount_clients $CLIENTS $MOUNT1
560
561     local param_file=$TMP/$tfile-params
562
563     local num=$(get_mds_dir $MOUNT1)
564
565         save_lustre_params mds$num "mdt.*.commit_on_sharing" > $param_file
566
567     # COS enabled
568     local COS=1
569     do_facet mds$num lctl set_param mdt.*.commit_on_sharing=$COS
570
571     test_21b_sub mds$num || error "Not all renames are replayed. COS=$COS"
572
573     # COS disabled (should fail)
574     COS=0
575     do_facet mds$num lctl set_param mdt.*.commit_on_sharing=$COS
576
577     # there is still a window when transactions may be written to disk before
578     # the mds device is set R/O. To avoid such a rare test failure, the check
579     # is repeated several times.
580     local n_attempts=1
581     while true; do
582     test_21b_sub mds$num || break;
583     let n_attempts=n_attempts+1
584     [ $n_attempts -gt 3 ] &&
585         error "The test cannot check whether COS works or not: all renames are replied w/o COS"
586     done
587     zconf_mount_clients $CLIENTS $MOUNT2
588     restore_lustre_params < $param_file
589     rm -f $param_file
590     return 0
591 }
592 run_test 21b "commit on sharing, two clients"
593
594 checkstat_22() {
595         checkstat $MOUNT1/$remote_dir || return 1
596         checkstat $MOUNT1/$remote_dir/dir || return 2
597         checkstat $MOUNT1/$remote_dir/$tfile-1 || return 3
598         checkstat $MOUNT1/$remote_dir/dir/$tfile-1 || return 4
599         return 0
600 }
601
602 create_remote_dir_files_22() {
603         do_node $CLIENT2 mkdir ${MOUNT2}/$remote_dir/dir || return 1
604         do_node $CLIENT1 createmany -o $MOUNT1/$remote_dir/dir/$tfile- 2 ||
605                                                             return 2
606         do_node $CLIENT2 createmany -o $MOUNT2/$remote_dir/$tfile- 2 ||
607                                                             return 3
608         return 0
609 }
610
611 test_22a () {
612         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
613         ([ $FAILURE_MODE == "HARD" ] &&
614                 [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
615                 skip "MDTs needs to be on diff hosts for HARD fail mode" &&
616                 return 0
617
618         local MDTIDX=1
619         local remote_dir=${tdir}/remote_dir
620
621         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
622
623         # OBD_FAIL_MDS_REINT_NET_REP       0x119
624         do_facet mds${MDTIDX} lctl set_param fail_loc=0x119
625         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
626         CLIENT_PID=$!
627
628         fail mds${MDTIDX}
629         wait $CLIENT_PID || error "lfs mkdir failed"
630
631         replay_barrier mds${MDTIDX}
632         create_remote_dir_files_22 || error "Remote creation failed $?"
633         fail mds${MDTIDX}
634
635         checkstat_22 || error "check stat failed $?"
636
637         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
638         return 0
639 }
640 run_test 22a "c1 lfs mkdir -i 1 dir1, M0 drop reply & fail, c2 mkdir dir1/dir"
641
642 test_22b () {
643         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
644         local MDTIDX=1
645         local remote_dir=$tdir/remote_dir
646
647         # OBD_FAIL_MDS_REINT_NET_REP       0x119
648         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
649
650         do_facet mds${MDTIDX} lctl set_param fail_loc=0x119
651         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
652         CLIENT_PID=$!
653
654         fail mds${MDTIDX},mds$((MDTIDX + 1))
655         wait $CLIENT_PID || error "lfs mkdir failed"
656
657         replay_barrier mds$MDTIDX
658         create_remote_dir_files_22 || error "Remote creation failed $?"
659         fail mds${MDTIDX}
660
661         checkstat_22 || error "check stat failed $?"
662
663         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
664         return 0
665 }
666 run_test 22b "c1 lfs mkdir -i 1 d1, M0 drop reply & fail M0/M1, c2 mkdir d1/dir"
667
668 test_22c () {
669         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
670         ([ $FAILURE_MODE == "HARD" ] &&
671                 [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
672                 skip "MDTs needs to be on diff hosts for HARD fail mode" &&
673                 return 0
674         local MDTIDX=1
675         local remote_dir=${tdir}/remote_dir
676
677         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
678
679         # OBD_FAIL_UPDATE_OBJ_NET_REP    0x1701
680         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x1701
681         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
682         CLIENT_PID=$!
683         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
684
685         fail mds$((MDTIDX+1))
686         wait $CLIENT_PID || error "lfs mkdir failed"
687
688         replay_barrier mds$MDTIDX
689         create_remote_dir_files_22 || error "Remote creation failed $?"
690         fail mds$MDTIDX
691
692         checkstat_22 || error "check stat failed $?"
693
694         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
695         return 0
696 }
697 run_test 22c "c1 lfs mkdir -i 1 d1, M1 drop update & fail M1, c2 mkdir d1/dir"
698
699 test_22d () {
700         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
701         local MDTIDX=1
702         local remote_dir=${tdir}/remote_dir
703
704         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
705
706         # OBD_FAIL_UPDATE_OBJ_NET_REP    0x1701
707         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x1701
708         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir &
709         CLIENT_PID=$!
710         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
711
712         fail mds${MDTIDX},mds$((MDTIDX + 1))
713         wait $CLIENT_PID || error "lfs mkdir failed"
714
715         replay_barrier mds$MDTIDX
716         create_remote_dir_files_22 || error "Remote creation failed $?"
717         fail mds$MDTIDX
718
719         checkstat_22 || error "check stat failed $?"
720
721         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
722         return 0
723 }
724 run_test 22d "c1 lfs mkdir -i 1 d1, M1 drop update & fail M0/M1,c2 mkdir d1/dir"
725
726 checkstat_23() {
727         checkstat $MOUNT1/$remote_dir || return 1
728         checkstat $MOUNT1/$remote_dir/$tfile-1 || return 2
729         return 0
730 }
731
732 create_remote_dir_files_23() {
733         do_node $CLIENT2 mkdir ${MOUNT2}/$remote_dir || return 1
734         do_node $CLIENT2 createmany -o $MOUNT2/$remote_dir/$tfile- 2 || return 2
735         return 0
736 }
737
738 test_23a () {
739         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
740         ([ $FAILURE_MODE == "HARD" ] &&
741                 [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
742                 skip "MDTs needs to be on diff hosts for HARD fail mode" &&
743                 return 0
744         local MDTIDX=1
745         local remote_dir=$tdir/remote_dir
746
747         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
748         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir ||
749                         error "lfs mkdir failed"
750         # OBD_FAIL_MDS_REINT_NET_REP       0x119
751         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x119
752         do_node $CLIENT1 rmdir $MOUNT1/$remote_dir &
753         local CLIENT_PID=$!
754         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
755
756         fail mds$((MDTIDX + 1))
757         wait $CLIENT_PID || error "rmdir remote dir failed"
758
759         replay_barrier mds${MDTIDX}
760         create_remote_dir_files_23 || error "Remote creation failed $?"
761         fail mds${MDTIDX}
762
763         checkstat_23 || error "check stat failed $?"
764
765         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
766         return 0
767 }
768 run_test 23a "c1 rmdir d1, M1 drop reply and fail, client2 mkdir d1"
769
770 test_23b () {
771         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
772         local MDTIDX=1
773         local remote_dir=$tdir/remote_dir
774
775         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
776         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir ||
777                         error "lfs mkdir failed"
778
779         # OBD_FAIL_MDS_REINT_NET_REP       0x119
780         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0x119
781         do_node $CLIENT1 rmdir $MOUNT1/$remote_dir &
782         local CLIENT_PID=$!
783         do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
784
785         fail mds${MDTIDX},mds$((MDTIDX + 1))
786         wait $CLIENT_PID || error "rmdir remote dir failed"
787
788         replay_barrier mds${MDTIDX}
789         create_remote_dir_files_23 || error "Remote creation failed $?"
790         fail mds${MDTIDX}
791
792         checkstat_23 || error "check stat failed $?"
793
794         rm -rf $MOUNT1/$tdir || error "rmdir remote_dir failed"
795         return 0
796 }
797 run_test 23b "c1 rmdir d1, M1 drop reply and fail M0/M1, c2 mkdir d1"
798
799 test_23c () {
800         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
801
802         ([ $FAILURE_MODE == "HARD" ] &&
803                 [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
804                 skip "MDTs needs to be on diff hosts for HARD fail mode" &&
805                 return 0
806         local MDTIDX=1
807         local remote_dir=$tdir/remote_dir
808
809         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
810         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir ||
811                         error "lfs mkdir failed"
812
813         # OBD_FAIL_UPDATE_OBJ_NET_REP    0x1701
814         do_facet mds${MDTIDX} lctl set_param fail_loc=0x1701
815         do_node $CLIENT1 rmdir $MOUNT1/$remote_dir &
816         CLIENT_PID=$!
817         do_facet mds${MDTIDX} lctl set_param fail_loc=0
818
819         fail mds${MDTIDX}
820         wait $CLIENT_PID || error "rmdir remote dir failed"
821
822         replay_barrier mds${MDTIDX}
823         create_remote_dir_files_23 || error "Remote creation failed $?"
824         fail mds${MDTIDX}
825
826         checkstat_23 || error "check stat failed $?"
827
828         rm -rf $MOUNT1/$tdir || return 6
829         return 0
830 }
831 run_test 23c "c1 rmdir d1, M0 drop update reply and fail M0, c2 mkdir d1"
832
833 test_23d () {
834         [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
835         local MDTIDX=1
836         local remote_dir=$tdir/remote_dir
837
838         do_node $CLIENT1 mkdir -p $MOUNT1/${tdir}
839         do_node $CLIENT1 $LFS mkdir -i $MDTIDX $MOUNT1/$remote_dir ||
840                         error "lfs mkdir failed"
841
842         # OBD_FAIL_UPDATE_OBJ_NET    0x1701
843         do_facet mds${MDTIDX} lctl set_param fail_loc=0x1701
844         do_node $CLIENT1 rmdir $MOUNT1/$remote_dir &
845         CLIENT_PID=$!
846         do_facet mds${MDTIDX} lctl set_param fail_loc=0
847
848         fail mds${MDTIDX},mds$((MDTIDX + 1))
849         wait $CLIENT_PID || error "rmdir remote dir failed"
850
851         replay_barrier mds${MDTIDX}
852         create_remote_dir_files_23 || error "Remote creation failed $?"
853         fail mds${MDTIDX}
854
855         checkstat_23 || error "check stat failed $?"
856
857         rm -rf $MOUNT1/$tdir || return 6
858         return 0
859 }
860 run_test 23d "c1 rmdir d1, M0 drop update reply and fail M0/M1, c2 mkdir d1"
861
862 # end commit on sharing tests 
863
864 complete $SECONDS
865 SLEEP=$((`date +%s` - $NOW))
866 [ $SLEEP -lt $TIMEOUT ] && sleep $SLEEP
867 [ "$MOUNTED2" = yes ] && zconf_umount $HOSTNAME $MOUNT2 || true
868 check_and_cleanup_lustre
869 exit_status