Whamcloud - gitweb
LU-2194 test: remove test_19b from except list
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
index 62d2051..f7cd763 100755 (executable)
@@ -20,8 +20,8 @@ require_dsh_mds || exit 0
 [ "$SLOW" = "no" ] && EXCEPT_SLOW="17  26a  26b    50   51     57"
 
 [ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-# bug number for skipped test:       LU-2194 LU-2547
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 19b     24a 24b"
+# bug number for skipped test:       LU-2547
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 24a 24b"
 
 build_test_filter
 
@@ -149,21 +149,91 @@ test_9() {
 run_test 9 "pause bulk on OST (bug 1420)"
 
 #bug 1521
-test_10() {
-       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
+test_10a() {
+       local before=$(date +%s)
+       local evict
+
+       do_facet client "stat $DIR > /dev/null"  ||
+               error "failed to stat $DIR: $?"
+       drop_bl_callback "chmod 0777 $DIR" ||
+               error "failed to chmod $DIR: $?"
+
+       # let the client reconnect
+       client_reconnect
+       evict=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state |
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
+       [ ! -z "$evict" ] && [[ $evict -gt $before ]] ||
+               (do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state;
+                   error "no eviction: $evict before:$before")
+
+       do_facet client checkstat -v -p 0777 $DIR ||
+               error "client checkstat failed: $?"
+}
+run_test 10a "finish request on server after client eviction (bug 1521)"
+
+test_10b() {
+       local before=$(date +%s)
+       local evict
+
+       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.53) ]] &&
+               skip "Need MDS version at least 2.6.53" && return
+       do_facet client "stat $DIR > /dev/null"  ||
+               error "failed to stat $DIR: $?"
+       drop_bl_callback_once "chmod 0777 $DIR" ||
+               error "failed to chmod $DIR: $?"
+
+       # let the client reconnect
+       client_reconnect
+       evict=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state |
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
+
+       [ -z "$evict" ] || [[ $evict -le $before ]] ||
+               (do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state;
+                   error "eviction happened: $evict before:$before")
+
+       do_facet client checkstat -v -p 0777 $DIR ||
+               error "client checkstat failed: $?"
 }
-run_test 10 "finish request on server after client eviction (bug 1521)"
+run_test 10b "re-send BL AST"
+
+test_10d() {
+       local before=$(date +%s)
+       local evict
+
+       [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.90) ]] &&
+               skip "Need MDS version at least 2.6.90" && return
+
+       # sleep 1 is to make sure that BEFORE is not equal to EVICTED below
+       sleep 1
+       rm -f $TMP/$tfile
+       echo -n ", world" | dd of=$TMP/$tfile bs=1c seek=5
+
+       mount_client $MOUNT2
+
+       $LFS setstripe -i 0 -c 1 $DIR1/$tfile
+       echo -n hello > $DIR1/$tfile
+
+       stat $DIR2/$tfile >& /dev/null
+       $LCTL set_param fail_err=71
+       drop_bl_callback_once "echo -n \\\", world\\\" >> $DIR2/$tfile"
+
+       client_reconnect
+
+       cmp $DIR1/$tfile $DIR2/$tfile || error "file contents differ"
+       cmp $DIR1/$tfile $TMP/$tfile || error "wrong content found"
+
+       evict=$(do_facet client $LCTL get_param osc.$FSNAME-OST0000*.state | \
+               tr -d '\-\[\] ' | \
+         awk -F"[ [,]" '/EVICTED$/ { if (mx<$1) {mx=$1;} } END { print mx }')
+
+       [[ $evict -gt $before ]] ||
+               (do_facet client $LCTL get_param osc.$FSNAME-OST0000*.state;
+                   error "no eviction: $evict before:$before")
+
+       rm $TMP/$tfile
+       umount_client $MOUNT2
+}
+run_test 10d "test failed blocking ast"
 
 #bug 2460
 # wake up a thread waiting for completion after eviction
@@ -177,7 +247,8 @@ test_11(){
 
        do_facet client $MULTIOP $DIR/$tfile or  ||
                { error "multiop read failed: $?"; return 3; }
-       drop_bl_callback $MULTIOP $DIR/$tfile Ow || echo "evicted as expected"
+       drop_bl_callback_once $MULTIOP $DIR/$tfile Ow ||
+               echo "evicted as expected"
 
        do_facet client munlink $DIR/$tfile ||
                { error "munlink failed: $?"; return 4; }
@@ -492,7 +563,7 @@ test_19c() {
        # 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 }')
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
 
        [ -z "$EVICT" ] || [[ $EVICT -le $BEFORE ]] || error "eviction happened"
 }
@@ -911,7 +982,8 @@ run_test 27 "fail LOV while using OSC's"
 
 test_28() {      # bug 6086 - error adding new clients
        do_facet client mcreate $DIR/$tfile       || return 1
-       drop_bl_callback "chmod 0777 $DIR/$tfile" ||echo "evicted as expected"
+       drop_bl_callback_once "chmod 0777 $DIR/$tfile" ||
+               echo "evicted as expected"
        #define OBD_FAIL_MDS_CLIENT_ADD 0x12f
        do_facet $SINGLEMDS "lctl set_param fail_loc=0x8000012f"
        # fail once (evicted), reconnect fail (fail_loc), ok
@@ -1163,10 +1235,10 @@ test_58() { # bug 11546
         pid=$!
         sleep 1
         lctl set_param fail_loc=0
-        drop_bl_callback rm -f $DIR/$tfile
+        drop_bl_callback_once rm -f $DIR/$tfile
         wait $pid
         # the first 'df' could tigger the eviction caused by
-        # 'drop_bl_callback', and it's normal case.
+        # 'drop_bl_callback_once', and it's normal case.
         # but the next 'df' should return successfully.
         do_facet client "df $DIR" || do_facet client "df $DIR"
 }
@@ -1568,10 +1640,9 @@ test_105()
         # get one of the clients from client list
         local rcli=$(echo $RCLIENTS |cut -d' ' -f 1)
 
-        local old_MOUNTOPT=$MOUNTOPT
-        MOUNTOPT=${MOUNTOPT},noir
+        local mount_opts=${MOUNT_OPTS:+$MOUNT_OPTS,}noir
         zconf_umount $rcli $MOUNT || error "umount failed"
-        zconf_mount $rcli $MOUNT || error "mount failed"
+        zconf_mount $rcli $MOUNT $mount_opts || error "mount failed"
 
         # make sure lustre mount at $rcli disabling IR
         local ir_state=$(check_cli_ir_state $rcli)
@@ -1593,8 +1664,7 @@ test_105()
        [ $ir_state = "DISABLED" -o $ir_state = "OFF" ] ||
                error "IR status on ost1 should be DISABLED"
 
-        # restore it
-        MOUNTOPT=$old_MOUNTOPT
+        # remount with the default MOUNT_OPTS
         zconf_umount $rcli $MOUNT || error "umount failed"
         zconf_mount $rcli $MOUNT || error "mount failed"
 
@@ -1971,7 +2041,7 @@ test_113() {
        # let the client reconnect
        client_reconnect
        EVICT=$($LCTL get_param mdc.$FSNAME-MDT*.state |
-          awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }')
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
 
        [ -z "$EVICT" ] || [[ $EVICT -le $BEFORE ]] || error "eviction happened"
 }