Whamcloud - gitweb
LU-7108 test: Remove sanityn tests from ALWAYS_EXCEPT list
[fs/lustre-release.git] / lustre / tests / sanityn.sh
old mode 100644 (file)
new mode 100755 (executable)
index 9c944ec..a0bfb32
@@ -3,8 +3,8 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: 3192 LU-1205 15528/3811 9977 15528/11549 18080
-ALWAYS_EXCEPT="                14b  18c     19         28   29          35    $SANITYN_EXCEPT"
+# bug number for skipped test: LU-1205 9977/LU-7105 LU-9452
+ALWAYS_EXCEPT="                18c     28           29      $SANITYN_EXCEPT"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
 SRCDIR=$(dirname $0)
@@ -745,42 +745,42 @@ enable_lockless_truncate() {
 test_32a() { # bug 11270
        local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
        save_lustre_params client "osc.*.lockless_truncate" > $p
-        cancel_lru_locks osc
-        enable_lockless_truncate 1
-        rm -f $DIR1/$tfile
-        lfs setstripe -c -1 $DIR1/$tfile
-        dd if=/dev/zero of=$DIR1/$tfile count=$OSTCOUNT bs=$STRIPE_BYTES > \
-                /dev/null 2>&1
-        clear_osc_stats
-
-        log "checking cached lockless truncate"
-        $TRUNCATE $DIR1/$tfile 8000000
-        $CHECKSTAT -s 8000000 $DIR2/$tfile || error "wrong file size"
-       [ $(calc_osc_stats lockless_truncate) -ne 0 ] ||
+       cancel_lru_locks osc
+       enable_lockless_truncate 1
+       rm -f $DIR1/$tfile
+       lfs setstripe -c -1 $DIR1/$tfile
+       dd if=/dev/zero of=$DIR1/$tfile count=$OSTCOUNT bs=$STRIPE_BYTES > \
+               /dev/null 2>&1
+       clear_stats osc.*.osc_stats
+
+       log "checking cached lockless truncate"
+       $TRUNCATE $DIR1/$tfile 8000000
+       $CHECKSTAT -s 8000000 $DIR2/$tfile || error "wrong file size"
+       [ $(calc_stats osc.*.osc_stats lockless_truncate) -ne 0 ] ||
                error "cached truncate isn't lockless"
 
-        log "checking not cached lockless truncate"
-        $TRUNCATE $DIR2/$tfile 5000000
-        $CHECKSTAT -s 5000000 $DIR1/$tfile || error "wrong file size"
-       [ $(calc_osc_stats lockless_truncate) -ne 0 ] ||
+       log "checking not cached lockless truncate"
+       $TRUNCATE $DIR2/$tfile 5000000
+       $CHECKSTAT -s 5000000 $DIR1/$tfile || error "wrong file size"
+       [ $(calc_stats osc.*.osc_stats lockless_truncate) -ne 0 ] ||
                error "not cached truncate isn't lockless"
 
-        log "disabled lockless truncate"
-        enable_lockless_truncate 0
-        clear_osc_stats
-        $TRUNCATE $DIR2/$tfile 3000000
-        $CHECKSTAT -s 3000000 $DIR1/$tfile || error "wrong file size"
-        [ $(calc_osc_stats lockless_truncate) -eq 0 ] ||
-                error "lockless truncate disabling failed"
-        rm $DIR1/$tfile
-        # restore lockless_truncate default values
-        restore_lustre_params < $p
-        rm -f $p
+       log "disabled lockless truncate"
+       enable_lockless_truncate 0
+       clear_stats osc.*.osc_stats
+       $TRUNCATE $DIR2/$tfile 3000000
+       $CHECKSTAT -s 3000000 $DIR1/$tfile || error "wrong file size"
+       [ $(calc_stats osc.*.osc_stats lockless_truncate) -eq 0 ] ||
+               error "lockless truncate disabling failed"
+       rm $DIR1/$tfile
+       # restore lockless_truncate default values
+       restore_lustre_params < $p
+       rm -f $p
 }
 run_test 32a "lockless truncate"
 
 test_32b() { # bug 11270
-        remote_ost_nodsh && skip "remote OST with nodsh" && return
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
 
        local node
        local facets=$(get_facets OST)
@@ -793,35 +793,42 @@ test_32b() { # bug 11270
                "ldlm.namespaces.filter-*.contended_locks" >> $p
        save_lustre_params $facets \
                "ldlm.namespaces.filter-*.contention_seconds" >> $p
-       clear_osc_stats
+       clear_stats osc.*.osc_stats
 
-        # agressive lockless i/o settings
-        for node in $(osts_nodes); do
-                do_node $node 'lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes 2000000; lctl set_param -n ldlm.namespaces.filter-*.contended_locks 0; lctl set_param -n ldlm.namespaces.filter-*.contention_seconds 60'
-        done
-        lctl set_param -n osc.*.contention_seconds 60
-        for i in $(seq 5); do
-                dd if=/dev/zero of=$DIR1/$tfile bs=4k count=1 conv=notrunc > /dev/null 2>&1
-                dd if=/dev/zero of=$DIR2/$tfile bs=4k count=1 conv=notrunc > /dev/null 2>&1
-        done
-        [ $(calc_osc_stats lockless_write_bytes) -ne 0 ] || error "lockless i/o was not triggered"
-        # disable lockless i/o (it is disabled by default)
-        for node in $(osts_nodes); do
-                do_node $node 'lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes 0; lctl set_param -n ldlm.namespaces.filter-*.contended_locks 32; lctl set_param -n ldlm.namespaces.filter-*.contention_seconds 0'
-        done
-        # set contention_seconds to 0 at client too, otherwise Lustre still
-        # remembers lock contention
-        lctl set_param -n osc.*.contention_seconds 0
-        clear_osc_stats
-        for i in $(seq 1); do
-                dd if=/dev/zero of=$DIR1/$tfile bs=4k count=1 conv=notrunc > /dev/null 2>&1
-                dd if=/dev/zero of=$DIR2/$tfile bs=4k count=1 conv=notrunc > /dev/null 2>&1
-        done
-        [ $(calc_osc_stats lockless_write_bytes) -eq 0 ] ||
-                error "lockless i/o works when disabled"
-        rm -f $DIR1/$tfile
-        restore_lustre_params <$p
-        rm -f $p
+       # agressive lockless i/o settings
+       do_nodes $(comma_list $(osts_nodes)) \
+               "lctl set_param -n ldlm.namespaces.*.max_nolock_bytes=2000000 \
+                       ldlm.namespaces.filter-*.contended_locks=0 \
+                       ldlm.namespaces.filter-*.contention_seconds=60"
+       lctl set_param -n osc.*.contention_seconds=60
+       for i in {1..5}; do
+               dd if=/dev/zero of=$DIR1/$tfile bs=4k count=1 conv=notrunc > \
+                       /dev/null 2>&1
+               dd if=/dev/zero of=$DIR2/$tfile bs=4k count=1 conv=notrunc > \
+                       /dev/null 2>&1
+       done
+       [ $(calc_stats osc.*.osc_stats lockless_write_bytes) -ne 0 ] ||
+               error "lockless i/o was not triggered"
+       # disable lockless i/o (it is disabled by default)
+       do_nodes $(comma_list $(osts_nodes)) \
+               "lctl set_param -n ldlm.namespaces.filter-*.max_nolock_bytes=0 \
+                       ldlm.namespaces.filter-*.contended_locks=32 \
+                       ldlm.namespaces.filter-*.contention_seconds=0"
+       # set contention_seconds to 0 at client too, otherwise Lustre still
+       # remembers lock contention
+       lctl set_param -n osc.*.contention_seconds=0
+       clear_stats osc.*.osc_stats
+       for i in {1..1}; do
+               dd if=/dev/zero of=$DIR1/$tfile bs=4k count=1 conv=notrunc > \
+                       /dev/null 2>&1
+               dd if=/dev/zero of=$DIR2/$tfile bs=4k count=1 conv=notrunc > \
+                       /dev/null 2>&1
+       done
+       [ $(calc_stats osc.*.osc_stats lockless_write_bytes) -eq 0 ] ||
+               error "lockless i/o works when disabled"
+       rm -f $DIR1/$tfile
+       restore_lustre_params <$p
+       rm -f $p
 }
 run_test 32b "lockless i/o"
 
@@ -2823,12 +2830,14 @@ test_71b() {
        checkfiemap --test ||
                { skip "error $?: checkfiemap failed" && return; }
 
-       $LFS setstripe -c -1 $DIR1 || error "setstripe failed"
-       dd if=/dev/urandom of=$DIR1/$tfile bs=40K count=1
-       [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR1/$tfile) + 1)))" = \
+       mkdir -p $DIR1/$tdir
+
+       $LFS setstripe -c -1 $DIR1/$tdir || error "setstripe failed"
+       dd if=/dev/urandom of=$DIR1/$tdir/$tfile bs=40K count=1
+       [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR1/$tdir/$tfile) + 1)))" = \
                "zfs" ] &&
                skip "ORI-366/LU-1941: FIEMAP unimplemented on ZFS" && return 0
-       checkfiemap $DIR1/$tfile 40960 || error "checkfiemap failed"
+       checkfiemap $DIR1/$tdir/$tfile 40960 || error "checkfiemap failed"
 }
 run_test 71b "check fiemap support for stripecount > 1"
 
@@ -2875,14 +2884,16 @@ test_73() {
                error "setfattr1 failed"
        getfattr -n user.attr1 $DIR2/$tfile || error "getfattr1 failed"
        getfattr -n user.attr1 $DIR1/$tfile || error "getfattr2 failed"
-       clear_llite_stats
+       clear_stats llite.*.stats
        # PR lock should be cached by now on both clients
        getfattr -n user.attr1 $DIR1/$tfile || error "getfattr3 failed"
        # 2 hits for getfattr(0)+getfattr(size)
-       [ $(calc_llite_stats getxattr_hits) -eq 2 ] || error "not cached in $DIR1"
+       [ $(calc_stats llite.*.stats getxattr_hits) -eq 2 ] ||
+               error "not cached in $DIR1"
        getfattr -n user.attr1 $DIR2/$tfile || error "getfattr4 failed"
        # 4 hits for more getfattr(0)+getfattr(size)
-       [ $(calc_llite_stats getxattr_hits) -eq 4 ] || error "not cached in $DIR2"
+       [ $(calc_stats llite.*.stats getxattr_hits) -eq 4 ] ||
+               error "not cached in $DIR2"
        rm -f $DIR2/$tfile
 
        restore_lustre_params < $p
@@ -3031,7 +3042,7 @@ nrs_write_read() {
        for ((i = 0; i < $n; i++)); do
                do_nodes $CLIENTS $myRUNAS dd if="$dir/nrs_w_$HOSTNAME" \
                        of=/dev/zero bs=1M seek=$i count=1 > /dev/null ||
-                       error "dd at ${i}MB on client failed (3)"
+                       error "dd at ${i}MB on client failed (3)" &
                local pids_r[$i]=$!
        done
        cancel_lru_locks osc
@@ -3415,6 +3426,7 @@ test_77j() {
                        ost.OSS.ost_io.nrs_policies="tbf\ opcode" \
                        ost.OSS.ost_io.nrs_tbf_rule="start\ ost_r\ ${idis}{ost_read}\ ${rateis}5" \
                        ost.OSS.ost_io.nrs_tbf_rule="start\ ost_w\ ${idis}{ost_write}\ ${rateis}20"
+       [ $? -ne 0 ] && error "failed to set TBF OPCode policy"
 
        nrs_write_read
        tbf_verify 20 5
@@ -3482,6 +3494,58 @@ test_77k() {
 }
 run_test 77k "check the extended TBF policy with NID/JobID/OPCode expression"
 
+test_77l() {
+       if [ $(lustre_version_code ost1) -lt $(version_code 2.9.54) ]; then
+               skip "Need OST version at least 2.9.54"
+               return 0
+       fi
+
+       local dir=$DIR/$tdir
+
+       mkdir $dir || error "mkdir $dir failed"
+       $LFS setstripe -c $OSTCOUNT $dir || error "setstripe to $dir failed"
+       chmod 777 $dir
+
+       local nodes=$(comma_list $(osts_nodes))
+       do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies=delay \
+                                      ost.OSS.ost_io.nrs_delay_min=4 \
+                                      ost.OSS.ost_io.nrs_delay_max=4 \
+                                      ost.OSS.ost_io.nrs_delay_pct=100
+       [ $? -ne 0 ] && error "Failed to set delay policy"
+
+       local start=$SECONDS
+       do_nodes "${SINGLECLIENT:-$HOSTNAME}" "$RUNAS" \
+                dd if=/dev/zero of="$dir/nrs_delay_$HOSTNAME" bs=1M count=1 \
+                  oflag=direct conv=fdatasync ||
+               { do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies="fifo";
+                 error "dd on client failed (1)"; }
+       local elapsed=$((SECONDS - start))
+
+       # NRS delay doesn't do sub-second timing, so a request enqueued at
+       # 0.9 seconds can be dequeued at 4.0
+       [ $elapsed -lt 3 ] &&
+               { do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies="fifo";
+                 error "Single 1M write should take at least 3 seconds"; }
+
+       start=$SECONDS
+       do_nodes "${SINGLECLIENT:-$HOSTNAME}" "$RUNAS" \
+                dd if=/dev/zero of="$dir/nrs_delay_$HOSTNAME" bs=1M count=10 \
+                  oflag=direct conv=fdatasync ||
+               { do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies="fifo";
+                 error "dd on client failed (2)"; }
+       elapsed=$((SECONDS - start))
+
+       [ $elapsed -lt 30 ] &&
+               { do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies="fifo";
+                 error "Ten 1M writes should take at least 30 seconds"; }
+
+       do_nodes $nodes lctl set_param ost.OSS.ost_io.nrs_policies="fifo"
+       [ $? -ne 0 ] && error "failed to set policy back to fifo"
+
+       return 0
+}
+run_test 77l "check NRS Delay slows write RPC processing"
+
 test_78() { #LU-6673
        local server_version=$(lustre_version_code ost1)
        [[ $server_version -ge $(version_code 2.7.58) ]] ||