Whamcloud - gitweb
LU-2194 tests: Wait for reconnect in recovery-small/19
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
index 997bc78..d1e51f8 100755 (executable)
@@ -2,8 +2,8 @@
 
 set -e
 
-#         bug  5494 5493  LU1999
-ALWAYS_EXCEPT="24   52    106    $RECOVERY_SMALL_EXCEPT"
+#         bug  5493  LU2034
+ALWAYS_EXCEPT="52    60      $RECOVERY_SMALL_EXCEPT"
 
 export MULTIOP=${MULTIOP:-multiop}
 PTLDEBUG=${PTLDEBUG:--1}
@@ -29,7 +29,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 +146,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)"
 
@@ -404,7 +418,7 @@ test_19a() {
        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 }')
 
@@ -424,7 +438,7 @@ test_19b() {
        do_facet client munlink $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 }')
 
@@ -432,6 +446,36 @@ test_19b() {
 }
 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 +734,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 +750,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 +758,42 @@ 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
+       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 "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.
@@ -880,10 +957,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
@@ -1497,12 +1575,17 @@ run_test 105 "IR: NON IR clients support"
 cleanup_106() {
        trap 0
        umount_client $DIR2
+       debugrestore
 }
 
 test_106() { # LU-1789
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.50) ]] ||
+               { skip "Need MDS version at least 2.3.50"; return 0; }
+
 #define OBD_FAIL_MDC_LIGHTWEIGHT         0x805
        $LCTL set_param fail_loc=0x805
 
+       debugsave
        trap cleanup_106 EXIT
 
        # enable lightweight flag on mdc connection
@@ -1515,11 +1598,18 @@ test_106() { # LU-1789
 
        touch $DIR2/$tfile || error "failed to create empty file"
        replay_barrier $SINGLEMDS
+
+       $LCTL set_param debug=console
+       $LCTL clear
        facet_failover $SINGLEMDS
 
        # lightweight connection must be evicted
-       wait_client_evicted $SINGLEMDS $MDS_NEXP $((TIMEOUT * 3)) || \
-               error "lightweight client not evicted by mds"
+       touch -c $DIR2/$tfile || true
+       $LCTL dk $TMP/lustre-log-$TESTNAME.log
+       evicted=`awk '/This client was evicted by .*MDT0000/ {
+                                     print;
+                     }' $TMP/lustre-log-$TESTNAME.log`
+       [ -z "$evicted" ] && error "lightweight client not evicted by mds"
 
        # and all operations performed by lightweight client should be
        # synchronous, so the file created before mds restart should be there
@@ -1530,6 +1620,29 @@ test_106() { # LU-1789
 }
 run_test 106 "lightweight connection support"
 
-complete $(basename $0) $SECONDS
+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"
+complete $SECONDS
 check_and_cleanup_lustre
 exit_status