Whamcloud - gitweb
LU-15358 tests: Variable incorrectly defined under sanityn
[fs/lustre-release.git] / lustre / tests / sanityn.sh
index 752f917..2cbb21f 100755 (executable)
@@ -866,52 +866,29 @@ test_31b() {
 }
 run_test 31b "voluntary OST cancel / blocking ast race=============="
 
-# enable/disable lockless truncate feature, depending on the arg 0/1
-enable_lockless_truncate() {
-       lctl set_param -n $OSC.*.lockless_truncate $1
-}
+#LU-14949 - multi-client version of the test 31r in sanity.
+test_31r() {
+       touch $DIR/$tfile.target
+       touch $DIR/$tfile.source
 
-test_32a() { # bug 11270
-       local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
-       local stripe_size=$(do_facet $SINGLEMDS \
-               "$LCTL get_param -n lod.$(facet_svc $SINGLEMDS)*.stripesize")
+       ls -l $DIR/$tfile.target # cache it for sure
 
-       save_lustre_params client "$OSC.*.lockless_truncate" > $save
-       # restore lockless_truncate default values on exit
-       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
-       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_size > \
-               /dev/null 2>&1
-       clear_stats $OSC.*.${OSC}_stats
+       #OBD_FAIL_LLITE_OPEN_DELAY 0x1419
+       $LCTL set_param fail_loc=0x1419 fail_val=3
+       cat $DIR/$tfile.target &
+       CATPID=$!
 
-       log "checking cached lockless truncate"
-       $TRUNCATE $DIR1/$tfile 8000000
-       $CHECKSTAT -s 8000000 $DIR2/$tfile ||
-               error "cached truncate - 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 "not cached truncate - 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_stats $OSC.*.${OSC}_stats
-       $TRUNCATE $DIR2/$tfile 3000000
-       $CHECKSTAT -s 3000000 $DIR1/$tfile ||
-               error "lockless truncate disabled - wrong file size"
-       [ $(calc_stats $OSC.*.${OSC}_stats lockless_truncate) -eq 0 ] ||
-               error "lockless truncate disabling failed"
-       rm -f $DIR1/$tfile
+       # Guarantee open is waiting before we get here
+       sleep 1
+       mv $DIR2/$tfile.source $DIR2/$tfile.target
+
+       wait $CATPID
+       RC=$?
+       if [[ $RC -ne 0 ]]; then
+               error "open with cat failed, rc=$RC"
+       fi
 }
-run_test 32a "lockless truncate"
+run_test 31r "open-rename(replace) race"
 
 test_32b() { # bug 11270
        remote_ost_nodsh && skip "remote OST with nodsh" && return
@@ -964,25 +941,27 @@ test_32b() { # bug 11270
        restore_lustre_params <$p
        rm -f $p
 }
-run_test 32b "lockless i/o"
+# Disable test 32b prior to full removal
+#run_test 32b "lockless i/o"
 
 print_jbd_stat () {
-    local dev
-    local mdts=$(get_facets MDS)
-    local varcvs
-    local mds
-
-    local stat=0
-    for mds in ${mdts//,/ }; do
-        varsvc=${mds}_svc
-        dev=$(basename $(do_facet $mds "lctl get_param -n osd*.${!varsvc}.mntdev|\
-               xargs readlink -f" ))
-       val=$(do_facet $mds "cat /proc/fs/jbd*/${dev}{,:*,-*}/info 2>/dev/null |
-               head -n1")
-        val=${val%% *};
-        stat=$(( stat + val))
-    done
-    echo $stat
+       local mdts=$(get_facets MDS)
+       local stat=0
+       local varsvc
+       local dev
+       local mds
+
+       for mds in ${mdts//,/ }; do
+               varsvc=${mds}_svc
+
+               dev=$(basename $(do_facet $mds "lctl get_param -n \
+                       osd*.${!varsvc}.mntdev | xargs readlink -f"))
+               val=$(do_facet $mds "cat /proc/fs/jbd*/${dev}{,:*,-*}/info \
+                       2>/dev/null | head -n1")
+               val=${val%% *};
+               stat=$((stat + val))
+       done
+       echo $stat
 }
 
 # commit on sharing tests
@@ -1576,7 +1555,7 @@ check_pdo_conflict() {
 test_40a() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       mkdir $DIR2/$tdir
+       mkdir_on_mdt0 $DIR2/$tdir
        pdo_lru_clear
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK    0x145
        do_nodes $(comma_list $(mdts_nodes)) \
@@ -1610,7 +1589,7 @@ run_test 40a "pdirops: create vs others =============="
 test_40b() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       mkdir $DIR2/$tdir
+       mkdir_on_mdt0 $DIR2/$tdir
        pdo_lru_clear
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK    0x145
        do_nodes $(comma_list $(mdts_nodes)) \
@@ -1645,7 +1624,7 @@ run_test 40b "pdirops: open|create and others =============="
 test_40c() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       mkdir $DIR2/$tdir
+       mkdir_on_mdt0 $DIR2/$tdir
        pdo_lru_clear
        touch $DIR1/$tdir/$tfile
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK    0x145
@@ -1681,7 +1660,7 @@ run_test 40c "pdirops: link and others =============="
 test_40d() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       mkdir $DIR2/$tdir
+       mkdir_on_mdt0 $DIR2/$tdir
        pdo_lru_clear
        touch $DIR1/$tdir/$tfile
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK    0x145
@@ -1716,7 +1695,7 @@ run_test 40d "pdirops: unlink and others =============="
 test_40e() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
 
-       mkdir $DIR2/$tdir
+       mkdir_on_mdt0 $DIR2/$tdir
        pdo_lru_clear
        touch $DIR1/$tdir/$tfile
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK    0x145
@@ -2262,7 +2241,7 @@ test_43j() {
        [[ $MDS1_VERSION -lt $(version_code 2.13.52) ]] &&
                skip "Need MDS version newer than 2.13.52"
 
-       mkdir $DIR1/$tdir
+       mkdir_on_mdt0 $DIR1/$tdir
        for i in {1..100}; do
 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_CREATE_RACE         0x167
                do_nodes $(comma_list $(mdts_nodes)) \
@@ -3105,12 +3084,12 @@ test_51a() {
 run_test 51a "layout lock: refresh layout should work"
 
 test_51b() {
-       [[ "$MDS1_VERSION" -ge $(version_code 2.3.59) ]] ||
+       (( $MDS1_VERSION >= $(version_code 2.3.59) )) ||
                skip "Need MDS version at least 2.3.59"
 
        local tmpfile=`mktemp`
 
-       $LFS setstripe -E 1M -c 1 -E -1 --extension-size 64M $DIR1/$tfile ||
+       $LFS setstripe -E 1m -S 1M -c 1 -E -1 -c 1 $DIR1/$tfile ||
                error "Create $DIR1/$tfile failed"
 
        dd if=/dev/zero of=$DIR1/$tfile bs=1k count=1 conv=notrunc ||
@@ -4438,6 +4417,48 @@ test_77n() { #LU-10802
 }
 run_test 77n "check wildcard support for TBF JobID NRS policy"
 
+test_77o() {
+       (( $OST1_VERSION > $(version_code 2.14.54) )) ||
+               skip "need OST > 2.14.54"
+
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_policies="tbf\ nid"
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="start\ name\ nid={192.168.*.*@tcp}\ rate=10000"
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="start\ name1\ nid={192.168.*.*@tcp}\ rate=10000"
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="change\ name1\ rank=name"
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="stop\ name"
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_policies="fifo"
+}
+run_test 77o "Changing rank should not panic"
+
+test_77q() {
+       local i
+
+       (( $MDS1_VERSION > $(version_code 2.14.54) )) ||
+               skip "need MDS >= 2.14.54"
+
+       do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_policies="tbf"
+       stack_trap "do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_policies=fifo"
+
+       for i in {1..50}; do
+               local pid1 pid2
+
+               do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="'start rule77q_1 uid={500}&gid={500} rate=100'" &
+               pid1=$!
+               do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="'start rule77q_2 uid={1000}&gid={1000} rate=100'" &
+               pid2=$!
+               wait $pid1 || error "$i: Fail to start TBF rule 'rule77q_1'"
+               wait $pid2 || error "$i: Fail to start TBF rule 'rule77q_2'"
+
+               do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="'stop rule77q_1'" &
+               pid1=$!
+               do_facet mds1 $LCTL set_param mds.MDS.mdt.nrs_tbf_rule="'stop rule77q_2'" &
+               pid2=$!
+               wait $pid1 || error "$i: Fail to stop TBF rule 'rule77q_1'"
+               wait $pid2 || error "$i: Fail to stop TBF rule 'rule77q_2'"
+       done
+}
+run_test 77q "Parallel TBF rule definitions should not panic"
+
 test_78() { #LU-6673
        local rc
 
@@ -4496,6 +4517,7 @@ test_80a() {
        local file
        local pid
 
+       mkdir_on_mdt0 $DIR1/$tdir
        mkdir -p $DIR1/$tdir/dir
        createmany -o $DIR1/$tdir/dir/f 10 ||
                error "create files under remote dir failed $i"
@@ -5217,8 +5239,28 @@ test_102() {
        echo "Test file_handle syscalls" > $DIR/$tfile ||
                error "write failed"
        check_fhandle_syscalls $DIR/$tfile $DIR2 ||
-               error "check_fhandle_syscalls failed"
-       rm -f $DIR2/$tfile
+               error "check_fhandle_syscalls $tfile failed"
+
+       # test this is working on DNE directories also
+       if (( MDSCOUNT > 1  MDS1_VERSION >= $(version_code 2.14.52) )); then
+               $LFS mkdir -i 1 $DIR/$tdir.remote
+               cancel_lru_locks mdc
+               check_fhandle_syscalls $DIR/$tdir.remote $DIR2 ||
+                       error "check_fhandle_syscalls $tdir.remote failed"
+               $LFS mkdir -c -1 $DIR/$tdir.remote/subdir
+               cancel_lru_locks mdc
+               check_fhandle_syscalls $DIR/$tdir.remote/subdir $DIR2 ||
+                       error "check_fhandle_syscalls $tdir.remote/subdir fail"
+
+               $LFS mkdir -c -1 $DIR/$tdir.stripe
+               cancel_lru_locks mdc
+               check_fhandle_syscalls $DIR/$tdir.stripe $DIR2 ||
+                       error "check_fhandle_syscalls $tdir.stripe failed"
+               $LFS mkdir -c -1 $DIR/$tdir.stripe/subdir
+               cancel_lru_locks mdc
+               check_fhandle_syscalls $DIR/$tdir.stripe/subdir $DIR2 ||
+                       error "check_fhandle_syscalls $tdir.stripe/subdir fail"
+       fi
 }
 run_test 102 "Test open by handle of unlinked file"
 
@@ -5669,6 +5711,71 @@ test_110() {
 }
 run_test 110 "do not grant another lock on resend"
 
+test_111() {
+       [ $MDSCOUNT -ge 2 ] || skip "needs >= 2 MDTs"
+       [[ $(facet_active_host mds1) = $(facet_active_host mds2) ]] ||
+               skip "MDT0 and MDT1 should be on the same node"
+
+       mkdir $DIR1/$tdir
+       $LFS mkdir -i 0 $DIR1/$tdir/mdt0dir
+       $LFS mkdir -i 1 $DIR1/$tdir/mdt1dir
+
+       mkdir $DIR1/$tdir/mdt0dir/foodir
+       touch $DIR1/$tdir/mdt0dir/foodir/{file1,file2}
+
+       $MULTIOP $DIR2/$tdir/mdt0dir/foodir/file2 Ow4096_c &
+       MULTIOP_PID=$!
+       ln $DIR1/$tdir/mdt0dir/foodir/file2 $DIR1/$tdir/mdt1dir/file2
+
+       #define OBD_FAIL_MDS_LINK_RENAME_RACE   0x18a
+       do_facet mds1 $LCTL set_param fail_loc=0x8000018a
+
+       ln $DIR1/$tdir/mdt0dir/foodir/file2 $DIR1/$tdir/mdt1dir/file2x &
+       sleep 1
+
+       rm $DIR2/$tdir/mdt1dir/file2
+       sleep 1
+
+       mv $DIR2/$tdir/mdt0dir/foodir/file1 $DIR2/$tdir/mdt0dir/foodir/file2
+       sleep 1
+
+       kill $MULTIOP_PID
+       wait
+       rm -r $DIR1/$tdir || error "Removing test dir failed"
+}
+run_test 111 "A racy rename/link an open file should not cause fs corruption"
+
+test_112() {
+       (( MDSCOUNT >= 2 )) ||
+               skip "We need at least 2 MDTs for this test"
+
+       (( MDS1_VERSION >= $(version_code 2.14.54) )) ||
+               skip "Need server version at least 2.14.54"
+
+       local rr
+       local count
+
+       rr=$($LCTL get_param -n lmv.*.qos_threshold_rr | head -n1)
+       rr=${rr%%%}
+       stack_trap "$LCTL set_param lmv.*.qos_threshold_rr=$rr > /dev/null"
+
+       mkdir -p $DIR1/$tdir/s1/s2 || error "mkdir s2 failed"
+       $LFS mkdir -i 0 $DIR1/$tdir/s1/s2/s3 || error "mkdir s3 failed"
+       $LFS setdirstripe -D -i -1 --max-inherit-rr=0 $DIR1/$tdir/s1/s2/s3 ||
+               error "setdirstripe s3 failed"
+       $LCTL set_param lmv.*.qos_threshold_rr=90
+       mkdir $DIR2/$tdir/s1/s2/s3/d{1..64}
+       count=$($LFS getstripe -m $DIR2/$tdir/s1/s2/s3/d* | grep ^0 | wc -l)
+       (( count == 64 )) || error "only $count subdirs created on MDT0"
+
+       $LFS setdirstripe -D -i -1 --max-inherit-rr=3 $DIR1/$tdir/s1/s2/s3 ||
+               error "setdirstripe s3 failed"
+       mkdir $DIR2/$tdir/s1/s2/s3/s{1..64}
+       count=$($LFS getstripe -m $DIR2/$tdir/s1/s2/s3/s* | grep ^0 | wc -l)
+       (( count == 64 / MDSCOUNT )) || error "$count subdirs created on MDT0"
+}
+run_test 112 "update max-inherit in default LMV"
+
 log "cleanup: ======================================================"
 
 # kill and wait in each test only guarentee script finish, but command in script