X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Frecovery-small.sh;h=3f4a5cb4b2c6d56de7b41e08782cbfcdad71b74d;hp=aba5353305e1832fdd25bfad5154ae3599e6c704;hb=7136981bfaad8b95e15e9d2969b94c933491eb98;hpb=a4e6076ee269b54a381417fe9443ab8e9f6f80da diff --git a/lustre/tests/recovery-small.sh b/lustre/tests/recovery-small.sh index aba5353..3f4a5cb 100755 --- a/lustre/tests/recovery-small.sh +++ b/lustre/tests/recovery-small.sh @@ -2,8 +2,8 @@ set -e -# bug 5494 5493 LU2034 -ALWAYS_EXCEPT="24 52 60 $RECOVERY_SMALL_EXCEPT" +# bug 5493 LU2034 +ALWAYS_EXCEPT="52 60 $RECOVERY_SMALL_EXCEPT" export MULTIOP=${MULTIOP:-multiop} PTLDEBUG=${PTLDEBUG:--1} @@ -19,6 +19,10 @@ require_dsh_mds || exit 0 # 1 2.5 2.5 4 4 (min)" [ "$SLOW" = "no" ] && EXCEPT_SLOW="17 26a 26b 50 51 57" +[ $(facet_fstype $SINGLEMDS) = "zfs" ] && +# bug number for skipped test: LU-2194 + ALWAYS_EXCEPT="$ALWAYS_EXCEPT 19b" + build_test_filter # Allow us to override the setup if we already have a mounted system by @@ -29,7 +33,7 @@ CLEANUP=${CLEANUP:-""} check_and_setup_lustre assert_DIR -rm -rf $DIR/[df][0-9]* +rm -rf $DIR/d[0-9]* $DIR/f.${TESTSUITE}* test_1() { local f1="$DIR/$tfile" @@ -146,56 +150,70 @@ run_test 9 "pause bulk on OST (bug 1420)" #bug 1521 test_10() { - do_facet client mcreate $DIR/$tfile || return 1 - drop_bl_callback "chmod 0777 $DIR/$tfile" || echo "evicted as expected" - # wait for the mds to evict the client - #echo "sleep $(($TIMEOUT*2))" - #sleep $(($TIMEOUT*2)) - do_facet client touch $DIR/$tfile || echo "touch failed, evicted" - do_facet client checkstat -v -p 0777 $DIR/$tfile || return 3 - do_facet client "munlink $DIR/$tfile" + do_facet client mcreate $DIR/$tfile || + { error "mcreate failed: $?"; return 1; } + drop_bl_callback "chmod 0777 $DIR/$tfile" || echo "evicted as expected" + # wait for the mds to evict the client + #echo "sleep $(($TIMEOUT*2))" + #sleep $(($TIMEOUT*2)) + do_facet client touch $DIR/$tfile || echo "touch failed, evicted" + do_facet client checkstat -v -p 0777 $DIR/$tfile || + { error "client checkstat failed: $?"; return 3; } + do_facet client "munlink $DIR/$tfile" + # allow recovery to complete + client_up || client_up || sleep $TIMEOUT } run_test 10 "finish request on server after client eviction (bug 1521)" #bug 2460 # wake up a thread waiting for completion after eviction test_11(){ - do_facet client $MULTIOP $DIR/$tfile Ow || return 1 - do_facet client $MULTIOP $DIR/$tfile or || return 2 + do_facet client $MULTIOP $DIR/$tfile Ow || + { error "multiop write failed: $?"; return 1; } + do_facet client $MULTIOP $DIR/$tfile or || + { error "multiop read failed: $?"; return 2; } - cancel_lru_locks osc + cancel_lru_locks osc - do_facet client $MULTIOP $DIR/$tfile or || return 3 - drop_bl_callback $MULTIOP $DIR/$tfile Ow || echo "evicted as expected" + do_facet client $MULTIOP $DIR/$tfile or || + { error "multiop read failed: $?"; return 3; } + drop_bl_callback $MULTIOP $DIR/$tfile Ow || echo "evicted as expected" - do_facet client munlink $DIR/$tfile || return 4 + do_facet client munlink $DIR/$tfile || + { error "munlink failed: $?"; return 4; } + # allow recovery to complete + client_up || client_up || sleep $TIMEOUT } run_test 11 "wake up a thread waiting for completion after eviction (b=2460)" #b=2494 test_12(){ - $LCTL mark $MULTIOP $DIR/$tfile OS_c - do_facet $SINGLEMDS "lctl set_param fail_loc=0x115" - clear_failloc $SINGLEMDS $((TIMEOUT * 2)) & - multiop_bg_pause $DIR/$tfile OS_c || return 1 - PID=$! + $LCTL mark $MULTIOP $DIR/$tfile OS_c + do_facet $SINGLEMDS "lctl set_param fail_loc=0x115" + clear_failloc $SINGLEMDS $((TIMEOUT * 2)) & + multiop_bg_pause $DIR/$tfile OS_c || + { error "multiop failed: $?"; return 1; } + PID=$! #define OBD_FAIL_MDS_CLOSE_NET 0x115 - kill -USR1 $PID - echo "waiting for multiop $PID" - wait $PID || return 2 - do_facet client munlink $DIR/$tfile || return 3 + kill -USR1 $PID + echo "waiting for multiop $PID" + wait $PID || { error "wait for multiop faile: $?"; return 2; } + do_facet client munlink $DIR/$tfile || + { error "client munlink failed: $?"; return 3; } + # allow recovery to complete + client_up || client_up || sleep $TIMEOUT } run_test 12 "recover from timed out resend in ptlrpcd (b=2494)" # Bug 113, check that readdir lost recv timeout works. test_13() { - mkdir -p $DIR/$tdir || return 1 - touch $DIR/$tdir/newentry || return + mkdir -p $DIR/$tdir || { error "mkdir failed: $?"; return 1; } + touch $DIR/$tdir/newentry || { error "touch failed: $?"; return 2; } # OBD_FAIL_MDS_READPAGE_NET|OBD_FAIL_ONCE - do_facet $SINGLEMDS "lctl set_param fail_loc=0x80000104" - ls $DIR/$tdir || return 3 - do_facet $SINGLEMDS "lctl set_param fail_loc=0" - rm -rf $DIR/$tdir || return 4 + do_facet $SINGLEMDS "lctl set_param fail_loc=0x80000104" + ls $DIR/$tdir || { error "ls failed: $?"; return 3; } + do_facet $SINGLEMDS "lctl set_param fail_loc=0" + rm -rf $DIR/$tdir || { error "remove test dir failed: $?"; return 4; } } run_test 13 "mdc_readpage restart test (bug 1138)" @@ -395,20 +413,23 @@ test_19a() { local BEFORE=`date +%s` local EVICT - mount_client $DIR2 + mount_client $DIR2 || error "failed to mount $DIR2" - do_facet client mcreate $DIR/$tfile || return 1 - drop_ldlm_cancel "chmod 0777 $DIR2" + do_facet client "stat $DIR > /dev/null" || + error "failed to stat $DIR: $?" + drop_ldlm_cancel "chmod 0777 $DIR2" || + error "failed to chmod $DIR2" umount_client $DIR2 - do_facet client "munlink $DIR/$tfile" # let the client reconnect - sleep 5 + client_reconnect EVICT=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state | \ awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }') - [ ! -z "$EVICT" ] && [[ $EVICT -gt $BEFORE ]] || error "no eviction" + [ ! -z "$EVICT" ] && [[ $EVICT -gt $BEFORE ]] || + (do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state; + error "no eviction: $EVICT before:$BEFORE") } run_test 19a "test expired_lock_main on mds (2867)" @@ -416,22 +437,58 @@ test_19b() { local BEFORE=`date +%s` local EVICT - mount_client $DIR2 + mount_client $DIR2 || error "failed to mount $DIR2: $?" - do_facet client $MULTIOP $DIR/$tfile Ow || return 1 - drop_ldlm_cancel $MULTIOP $DIR2/$tfile Ow - umount_client $DIR2 - do_facet client munlink $DIR/$tfile + do_facet client $MULTIOP $DIR/$tfile Ow || + error "failed to run multiop: $?" + drop_ldlm_cancel $MULTIOP $DIR2/$tfile Ow || + error "failed to ldlm_cancel: $?" + + umount_client $DIR2 || error "failed to unmount $DIR2: $?" + do_facet client munlink $DIR/$tfile || + error "failed to unlink $DIR/$tfile: $?" # let the client reconnect - sleep 5 + client_reconnect EVICT=$(do_facet client $LCTL get_param osc.$FSNAME-OST*.state | \ awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }') - [ ! -z "$EVICT" ] && [[ $EVICT -gt $BEFORE ]] || error "no eviction" + [ ! -z "$EVICT" ] && [[ $EVICT -gt $BEFORE ]] || + (do_facet client $LCTL get_param osc.$FSNAME-OST*.state; + error "no eviction: $EVICT before:$BEFORE") } run_test 19b "test expired_lock_main on ost (2867)" +test_19c() { + local BEFORE=`date +%s` + + mount_client $DIR2 + $LCTL set_param ldlm.namespaces.*.early_lock_cancel=0 + + mkdir -p $DIR1/$tfile + stat $DIR1/$tfile + +#define OBD_FAIL_PTLRPC_CANCEL_RESEND 0x516 + do_facet mds $LCTL set_param fail_loc=0x80000516 + + touch $DIR2/$tfile/file1 & + PID1=$! + # let touch to get blocked on the server + sleep 2 + + wait $PID1 + $LCTL set_param ldlm.namespaces.*.early_lock_cancel=1 + umount_client $DIR2 + + # let the client reconnect + sleep 5 + EVICT=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state | + awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }') + + [ -z "$EVICT" ] || [[ $EVICT -le $BEFORE ]] || error "eviction happened" +} +run_test 19c "check reconnect and lock resend do not trigger expired_lock_main" + test_20a() { # bug 2983 - ldlm_handle_enqueue cleanup remote_ost_nodsh && skip "remote OST with nodsh" && return 0 @@ -690,7 +747,7 @@ test_23() { #b=4561 } run_test 23 "client hang when close a file after mds crash" -test_24() { # bug 11710 details correct fsync() behavior +test_24a() { # bug 11710 details correct fsync() behavior remote_ost_nodsh && skip "remote OST with nodsh" && return 0 mkdir -p $DIR/$tdir @@ -706,7 +763,7 @@ test_24() { # bug 11710 details correct fsync() behavior client_reconnect [ $rc -eq 0 ] && error_ignore 5494 "multiop didn't fail fsync: rc $rc" || true } -run_test 24 "fsync error (should return error)" +run_test 24a "fsync error (should return error)" wait_client_evicted () { local facet=$1 @@ -714,9 +771,43 @@ wait_client_evicted () { local varsvc=${facet}_svc wait_update $(facet_active_host $facet) \ - "lctl get_param -n *.${!varsvc}.num_exports | cut -d' ' -f2" \ - $((exports - 1)) $3 + "lctl get_param -n *.${!varsvc}.num_exports | cut -d' ' -f2" \ + $((exports - 1)) $3 +} + +test_24b() { + remote_ost_nodsh && skip "remote OST with nodsh" && return 0 + + dmesg -c > /dev/null + mkdir -p $DIR/$tdir + lfs setstripe $DIR/$tdir -s 0 -i 0 -c 1 + cancel_lru_locks osc + multiop_bg_pause $DIR/$tdir/$tfile-1 Ow8192_yc || + error "mulitop Ow8192_yc failed" + + MULTI_PID1=$! + multiop_bg_pause $DIR/$tdir/$tfile-2 Ow8192_c || + error "mulitop Ow8192_c failed" + + MULTI_PID2=$! + ost_evict_client + + kill -USR1 $MULTI_PID1 + wait $MULTI_PID1 + rc1=$? + kill -USR1 $MULTI_PID2 + wait $MULTI_PID2 + rc2=$? + lctl set_param fail_loc=0x0 + client_reconnect + [ $rc1 -eq 0 -o $rc2 -eq 0 ] && + error_ignore 5494 "multiop didn't fail fsync: $rc1 or close: $rc2" || + true + + dmesg | grep "dirty page discard:" || \ + error "no discarded dirty page found!" } +run_test 24b "test dirty page discard due to client eviction" test_26a() { # was test_26 bug 5921 - evict dead exports by pinger # this test can only run from a client on a separate node. @@ -826,6 +917,7 @@ test_29a() { # bug 22273 - error adding new clients # fail abort so client will be new again fail_abort $SINGLEMDS client_up || error "reconnect failed" + wait_osc_import_state mds ost FULL return 0 } run_test 29a "error adding new clients doesn't cause LBUG (bug 22273)" @@ -880,10 +972,11 @@ test_51() { SEQ="1 5 10 $(seq $TIMEOUT 5 $(($TIMEOUT+10)))" echo will failover at $SEQ for i in $SEQ - do - echo failover in $i sec - sleep $i - facet_failover $SINGLEMDS + do + #echo failover in $i sec + log "test_$testnum: failover in $i sec" + sleep $i + facet_failover $SINGLEMDS done # client process should see no problems even though MDS went down # and recovery was interrupted @@ -1172,6 +1265,16 @@ test_61() } run_test 61 "Verify to not reuse orphan objects - bug 17025" +# test_62 as seen it b2_1 please do not reuse test_62 +#test_62() +#{ +# zconf_umount `hostname` $DIR +# #define OBD_FAIL_PTLRPC_DELAY_IMP_FULL 0x516 +# lctl set_param fail_loc=0x516 +# mount_client $DIR +#} +#run_test 62 "Verify connection flags race - bug LU-1716" + check_cli_ir_state() { local NODE=${1:-$HOSTNAME} @@ -1542,6 +1645,122 @@ test_106() { # LU-1789 } run_test 106 "lightweight connection support" +test_107 () { + local CLIENT_PID + local close_pid + + mkdir -p $DIR/$tdir + # OBD_FAIL_MDS_REINT_NET_REP 0x119 + do_facet $SINGLEMDS lctl set_param fail_loc=0x119 + multiop $DIR/$tdir D_c & + close_pid=$! + mkdir $DIR/$tdir/dir_106 & + CLIENT_PID=$! + do_facet $SINGLEMDS lctl set_param fail_loc=0 + fail $SINGLEMDS + + wait $CLIENT_PID || rc=$? + checkstat -t dir $DIR/$tdir/dir_106 || return 1 + + kill -USR1 $close_pid + wait $close_pid || return 2 + + return $rc +} +run_test 107 "drop reint reply, then restart MDT" + +test_110a () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + drop_request "$LFS mkdir -i $MDTIDX $remote_dir" || + error "lfs mkdir failed" + local diridx=$($GETSTRIPE -M $remote_dir) + [ $diridx -eq $MDTIDX ] || error "$diridx != $MDTIDX" + + rm -rf $DIR/$tdir || error "rmdir failed" +} +run_test 110a "create remote directory: drop client req" + +test_110b () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + drop_reint_reply "$LFS mkdir -i $MDTIDX $remote_dir" || + error "lfs mkdir failed" + + diridx=$($GETSTRIPE -M $remote_dir) + [ $diridx -eq $MDTIDX ] || error "$diridx != $MDTIDX" + + rm -rf $DIR/$tdir || error "rmdir failed" +} +run_test 110b "create remote directory: drop Master rep" + +test_110c () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + drop_update_reply $((MDTIDX + 1)) "$LFS mkdir -i $MDTIDX $remote_dir" || + error "lfs mkdir failed" + + diridx=$($GETSTRIPE -M $remote_dir) + [ $diridx -eq $MDTIDX ] || error "$diridx != $MDTIDX" + + rm -rf $DIR/$tdir || error "rmdir failed" +} +run_test 110c "create remote directory: drop update rep on slave MDT" + +test_110d () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + $LFS mkdir -i $MDTIDX $remote_dir || error "lfs mkdir failed" + + drop_request "rm -rf $remote_dir" || error "rm remote dir failed" + + rm -rf $DIR/$tdir || error "rmdir failed" + + return 0 +} +run_test 110d "remove remote directory: drop client req" + +test_110e () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + $LFS mkdir -i $MDTIDX $remote_dir || error "lfs mkdir failed" + drop_reint_reply "rm -rf $remote_dir" || error "rm remote dir failed" + + rm -rf $DIR/$tdir || error "rmdir failed" + + return 0 +} +run_test 110e "remove remote directory: drop master rep" + +test_110f () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0 + local remote_dir=$DIR/$tdir/remote_dir + local MDTIDX=1 + + mkdir -p $DIR/$tdir + $LFS mkdir -i $MDTIDX $remote_dir || error "lfs mkdir failed" + drop_update_reply $MDTIDX "rm -rf $remote_dir" || + error "rm remote dir failed" + + rm -rf $DIR/$tdir || error "rmdir failed" +} +run_test 110f "remove remote directory: drop slave rep" + complete $SECONDS check_and_cleanup_lustre exit_status