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