require_dsh_mds || exit 0
# Skip these tests
-# bug number for skipped tests: b=17466/LU-472
-ALWAYS_EXCEPT=" 61d $REPLAY_SINGLE_EXCEPT"
+# bug number for skipped tests:
+# b=17466/LU-472 : 61d
+# LU-5319 : 53a 53d
+ALWAYS_EXCEPT="61d 53a 53d $REPLAY_SINGLE_EXCEPT"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
+case "$(lsb_release -sr)" in # only disable tests for el7
+7*) # bug number: LU-6455-----
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 28"
+ ;;
+esac
+
# 63 min 7 min AT AT AT AT"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="1 2 3 4 6 12 16 44a 44b 65 66 67 68"
[ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-# bug number for skipped test: LU-1867 LU-3127 LU-5407
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 89 73b 58c"
+# bug number for skipped test: LU-1867 LU-3127
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 89 73b"
build_test_filter
large_xattr_enabled &&
orig="$(generate_string $(max_xattr_size))" || orig="bar"
+ # Original extended attribute can be long. Print a small version of
+ # attribute if an error occurs
+ local sm_msg=$(printf "%.9s" $orig)
- mount_client $MOUNT2
+ mount_client $MOUNT2 || error "mount_client on $MOUNT2 failed"
mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
touch $DIR/$tdir/$tfile || error "touch $DIR/$tdir/$tfile failed"
replay_barrier $SINGLEMDS
fail $SINGLEMDS
new=$(get_xattr_value trusted.foo $MOUNT2/$tdir/$tfile)
[[ "$new" = "$orig" ]] ||
- error "xattr set ($orig) is not what was returned ($new)"
+ error "xattr set ($sm_msg...) differs from xattr get ($new)"
rm -f $DIR/$tdir/$tfile
rmdir $DIR/$tdir
cleanup_58
+ wait_clients_import_state ${CLIENTS:-$HOSTNAME} "mgs" FULL
}
run_test 58b "test replay of setxattr op"
test_58c() { # bug 16570
- local orig
- local orig1
- local new
-
- trap cleanup_58 EXIT
-
- if large_xattr_enabled; then
- local xattr_size=$(max_xattr_size)
- orig="$(generate_string $((xattr_size / 2)))"
- orig1="$(generate_string $xattr_size)"
- else
- orig="bar"
- orig1="bar1"
- fi
+ local orig
+ local orig1
+ local new
+
+ trap cleanup_58 EXIT
- mount_client $MOUNT2
+ if large_xattr_enabled; then
+ local xattr_size=$(max_xattr_size)
+ orig="$(generate_string $((xattr_size / 2)))"
+ orig1="$(generate_string $xattr_size)"
+ else
+ orig="bar"
+ orig1="bar1"
+ fi
+
+ # PING_INTERVAL max(obd_timeout / 4, 1U)
+ sleep $((TIMEOUT / 4))
+
+ # Original extended attribute can be long. Print a small version of
+ # attribute if an error occurs
+ local sm_msg=$(printf "%.9s" $orig)
+ local sm_msg1=$(printf "%.9s" $orig1)
+
+ mount_client $MOUNT2 || error "mount_client on $MOUNT2 failed"
mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
touch $DIR/$tdir/$tfile || error "touch $DIR/$tdir/$tfile failed"
drop_request "setfattr -n trusted.foo -v $orig $DIR/$tdir/$tfile" ||
error "drop_request for setfattr failed"
new=$(get_xattr_value trusted.foo $MOUNT2/$tdir/$tfile)
[[ "$new" = "$orig" ]] ||
- error "xattr set ($orig) is not what was returned ($new)"
+ error "xattr set ($sm_msg...) differs from xattr get ($new)"
drop_reint_reply "setfattr -n trusted.foo1 \
-v $orig1 $DIR/$tdir/$tfile" ||
- error "drop_request for setfattr failed"
+ error "drop_reint_reply for setfattr failed"
new=$(get_xattr_value trusted.foo1 $MOUNT2/$tdir/$tfile)
[[ "$new" = "$orig1" ]] ||
- error "second xattr set ($orig1) not what was returned ($new)"
+ error "second xattr set ($sm_msg1...) differs xattr get ($new)"
rm -f $DIR/$tdir/$tfile
rmdir $DIR/$tdir
cleanup_58
local start_ts=$(date +%s)
local cmd="rundbench 1 -t $duration"
local pid=""
+ if [ $MDSCOUNT -ge 2 ]; then
+ test_mkdir -p -c$MDSCOUNT $DIR/$tdir
+ $LFS setdirstripe -D -c$MDSCOUNT $DIR/$tdir
+ fi
do_nodesv $clients "set -x; MISSING_DBENCH_OK=$MISSING_DBENCH_OK \
PATH=\$PATH:$LUSTRE/utils:$LUSTRE/tests/:$DBENCH_LIB \
DBENCH_LIB=$DBENCH_LIB TESTSUITE=$TESTSUITE TESTNAME=$TESTNAME \
elapsed=$(($(date +%s) - start_ts))
local num_failovers=0
+ local fail_index=1
while [ $elapsed -lt $duration ]; do
if ! check_for_process $clients dbench; then
error_noexit "dbench stopped on some of $clients!"
break
fi
sleep 1
- replay_barrier $SINGLEMDS
+ replay_barrier mds$fail_index
sleep 1 # give clients a time to do operations
# Increment the number of failovers
num_failovers=$((num_failovers+1))
- log "$TESTNAME fail $SINGLEMDS $num_failovers times"
- fail $SINGLEMDS
+ log "$TESTNAME fail mds$fail_index $num_failovers times"
+ fail mds$fail_index
elapsed=$(($(date +%s) - start_ts))
+ if [ $fail_index -ge $MDSCOUNT ]; then
+ fail_index=1
+ else
+ fail_index=$((fail_index+1))
+ fi
done
wait $pid || error "rundbench load on $clients failed!"
}
-run_test 70b "mds recovery; $CLIENTCOUNT clients"
+run_test 70b "dbench ${MDSCOUNT}mdts recovery; $CLIENTCOUNT clients"
# end multi-client tests
test_73a() {
remote_dir_check_80() {
local MDTIDX=1
- local diridx=$($GETSTRIPE -M $remote_dir)
+ local diridx
+ local fileidx
+
+ diridx=$($GETSTRIPE -M $remote_dir) ||
+ error "$GETSTRIPE -M $remote_dir failed"
[ $diridx -eq $MDTIDX ] || error "$diridx != $MDTIDX"
createmany -o $remote_dir/f-%d 20 || error "creation failed"
- local fileidx=$($GETSTRIPE -M $remote_dir/f-1)
+ fileidx=$($GETSTRIPE -M $remote_dir/f-1) ||
+ error "$GETSTRIPE -M $remote_dir/f-1 failed"
[ $fileidx -eq $MDTIDX ] || error "$fileidx != $MDTIDX"
return 0
$LFS mkdir -i $MDTIDX $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
fail mds${MDTIDX}
wait $CLIENT_PID || error "remote creation failed"
$LFS mkdir -i $MDTIDX $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds$((MDTIDX + 1))
wait $CLIENT_PID || error "remote creation failed"
$LFS mkdir -i $MDTIDX $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX}
fail mds$((MDTIDX + 1))
# sleep 3 seconds to make sure MDTs are failed after
# lfs mkdir -i has finished on all of MDTs.
sleep 3
+
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX},mds$((MDTIDX + 1))
wait $CLIENT_PID || error "remote creation failed"
# lfs mkdir -i has finished on all of MDTs.
sleep 3
+ replay_barrier mds1
fail mds${MDTIDX}
wait $CLIENT_PID || error "remote creation failed"
$LFS mkdir -i $MDTIDX $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds2
fail mds$((MDTIDX + 1))
wait $CLIENT_PID || error "remote creation failed"
# lfs mkdir -i has finished on all of MDTs.
sleep 3
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX}
fail mds$((MDTIDX + 1))
# lfs mkdir -i has finished on all of MDTs.
sleep 3
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX},mds$((MDTIDX + 1))
wait $CLIENT_PID || error "remote dir creation failed"
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds2
fail mds$((MDTIDX + 1))
wait $CLIENT_PID || error "rm remote dir failed"
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
fail mds${MDTIDX}
wait $CLIENT_PID || error "rm remote dir failed"
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX}
fail mds$((MDTIDX + 1))
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX},mds$((MDTIDX + 1))
wait $CLIENT_PID || error "rm remote dir failed"
local CLIENT_PID=$!
do_facet mds$((MDTIDX + 1)) lctl set_param fail_loc=0
+ replay_barrier mds1
fail mds${MDTIDX}
wait $CLIENT_PID || error "rm remote dir failed"
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds2
fail mds$((MDTIDX + 1))
wait $CLIENT_PID || error "rm remote dir failed"
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX}
fail mds$((MDTIDX + 1))
rmdir $remote_dir &
local CLIENT_PID=$!
+ replay_barrier mds1
+ replay_barrier mds2
fail mds${MDTIDX},mds$((MDTIDX + 1))
wait $CLIENT_PID || error "rm remote dir failed"
}
run_test 101 "Shouldn't reassign precreated objs to other files after recovery"
+check_striped_dir_110()
+{
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir ||
+ error "create striped dir failed"
+ local stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
+ [ $stripe_count -eq $MDSCOUNT ] ||
+ error "$stripe_count != 2 after recovery"
+}
+
+test_110a() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds1
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ fail mds1
+
+ check_striped_dir_110 || error "check striped_dir failed"
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110a "DNE: create striped dir, fail MDT1"
+
+test_110b() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds1
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ umount $MOUNT
+ fail mds1
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110b "DNE: create striped dir, fail MDT1 and client"
+
+test_110c() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds2
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ fail mds2
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110c "DNE: create striped dir, fail MDT2"
+
+test_110d() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds2
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ umount $MOUNT
+ fail mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110d "DNE: create striped dir, fail MDT2 and client"
+
+test_110e() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds2
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ umount $MOUNT
+ replay_barrier mds1
+ fail mds1,mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110e "DNE: create striped dir, uncommit on MDT2, fail client/MDT1/MDT2"
+
+test_110f() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds1
+ replay_barrier mds2
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ fail mds1,mds2
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110f "DNE: create striped dir, fail MDT1/MDT2"
+
+test_110g() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ replay_barrier mds1
+ $LFS mkdir -i1 -c$MDSCOUNT $DIR/$tdir/striped_dir
+ umount $MOUNT
+ replay_barrier mds2
+ fail mds1,mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+
+ check_striped_dir_110 || error "check striped_dir failed"
+
+ rm -rf $DIR/$tdir || error "rmdir failed"
+
+ return 0
+}
+run_test 110g "DNE: create striped dir, uncommit on MDT1, fail client/MDT1/MDT2"
+
+test_111a() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds1
+ rm -rf $DIR/$tdir/striped_dir
+ fail mds1
+
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111a "DNE: unlink striped dir, fail MDT1"
+
+test_111b() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds2
+ rm -rf $DIR/$tdir/striped_dir
+ umount $MOUNT
+ fail mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111b "DNE: unlink striped dir, fail MDT2"
+
+test_111c() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds1
+ rm -rf $DIR/$tdir/striped_dir
+ umount $MOUNT
+ replay_barrier mds2
+ fail mds1,mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111c "DNE: unlink striped dir, uncommit on MDT1, fail client/MDT1/MDT2"
+
+test_111d() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds2
+ rm -rf $DIR/$tdir/striped_dir
+ umount $MOUNT
+ replay_barrier mds1
+ fail mds1,mds2
+ zconf_mount $(hostname) $MOUNT
+ client_up || return 1
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+
+ return 0
+}
+run_test 111d "DNE: unlink striped dir, uncommit on MDT2, fail client/MDT1/MDT2"
+
+test_111e() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds2
+ rm -rf $DIR/$tdir/striped_dir
+ replay_barrier mds1
+ fail mds1,mds2
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111e "DNE: unlink striped dir, uncommit on MDT2, fail MDT1/MDT2"
+
+test_111f() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds1
+ rm -rf $DIR/$tdir/striped_dir
+ replay_barrier mds2
+ fail mds1,mds2
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111f "DNE: unlink striped dir, uncommit on MDT1, fail MDT1/MDT2"
+
+test_111g() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i1 -c2 $DIR/$tdir/striped_dir
+ replay_barrier mds1
+ replay_barrier mds2
+ rm -rf $DIR/$tdir/striped_dir
+ fail mds1,mds2
+ $CHECKSTAT -t dir $DIR/$tdir/striped_dir &&
+ error "striped dir still exists"
+ return 0
+}
+run_test 111g "DNE: unlink striped dir, fail MDT1/MDT2"
+
+test_112_rename_prepare() {
+ mkdir -p $DIR/$tdir/src_dir
+ $LFS mkdir -i 1 $DIR/$tdir/src_dir/src_child ||
+ error "create remote source failed"
+
+ touch $DIR/$tdir/src_dir/src_child/a
+
+ $LFS mkdir -i 2 $DIR/$tdir/tgt_dir ||
+ error "create remote target dir failed"
+
+ $LFS mkdir -i 3 $DIR/$tdir/tgt_dir/tgt_child ||
+ error "create remote target child failed"
+}
+
+test_112_check() {
+ find $DIR/$tdir/
+ $CHECKSTAT -t dir $DIR/$tdir/src_dir/src_child &&
+ error "src_child still exists after rename"
+
+ $CHECKSTAT -t file $DIR/$tdir/tgt_dir/tgt_child/a ||
+ error "missing file(a) after rename"
+}
+
+test_112a() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+ fail mds1
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112a "DNE: cross MDT rename, fail MDT1"
+
+test_112b() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds2
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds2
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112b "DNE: cross MDT rename, fail MDT2"
+
+test_112c() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds3
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds3
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112c "DNE: cross MDT rename, fail MDT3"
+
+test_112d() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112d "DNE: cross MDT rename, fail MDT4"
+
+test_112e() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds2
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds2
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112e "DNE: cross MDT rename, fail MDT1 and MDT2"
+
+test_112f() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds3
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds3
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112f "DNE: cross MDT rename, fail MDT1 and MDT3"
+
+test_112g() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112g "DNE: cross MDT rename, fail MDT1 and MDT4"
+
+test_112h() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds2
+ replay_barrier mds3
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds2,mds3
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112h "DNE: cross MDT rename, fail MDT2 and MDT3"
+
+test_112i() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds2
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds2,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112i "DNE: cross MDT rename, fail MDT2 and MDT4"
+
+test_112j() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds3
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds3,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112j "DNE: cross MDT rename, fail MDT3 and MDT4"
+
+test_112k() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds2
+ replay_barrier mds3
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds2,mds3
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112k "DNE: cross MDT rename, fail MDT1,MDT2,MDT3"
+
+test_112l() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds2
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds2,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112l "DNE: cross MDT rename, fail MDT1,MDT2,MDT4"
+
+test_112m() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds1
+ replay_barrier mds3
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds1,mds3,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112m "DNE: cross MDT rename, fail MDT1,MDT3,MDT4"
+
+test_112n() {
+ [ $MDSCOUNT -lt 4 ] && skip "needs >= 4 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+
+ test_112_rename_prepare
+ replay_barrier mds2
+ replay_barrier mds3
+ replay_barrier mds4
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ fail mds2,mds3,mds4
+
+ test_112_check
+ rm -rf $DIR/$tdir || error "rmdir failed"
+}
+run_test 112n "DNE: cross MDT rename, fail MDT2,MDT3,MDT4"
+
+test_115() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
+ ([ $FAILURE_MODE == "HARD" ] &&
+ [ "$(facet_host mds1)" == "$(facet_host mds2)" ]) &&
+ skip "MDTs needs to be on diff hosts for HARD fail mode" &&
+ return 0
+ local fail_index=0
+ local index
+ local i
+ local j
+
+ mkdir -p $DIR/$tdir
+ for ((j=0;j<$((MDSCOUNT));j++)); do
+ fail_index=$((fail_index+1))
+ index=$((fail_index % MDSCOUNT))
+ replay_barrier mds$((index + 1))
+ for ((i=0;i<5;i++)); do
+ test_mkdir -i$index -c$MDSCOUNT $DIR/$tdir/test_$i ||
+ error "create striped dir $DIR/$tdir/test_$i"
+ done
+
+ fail mds$((index + 1))
+ for ((i=0;i<5;i++)); do
+ checkstat -t dir $DIR/$tdir/test_$i ||
+ error "$DIR/$tdir/test_$i does not exist!"
+ done
+ rm -rf $DIR/$tdir/test_* ||
+ error "rmdir fails"
+ done
+}
+run_test 115 "failover for create/unlink striped directory"
+
complete $SECONDS
check_and_cleanup_lustre
exit_status