Whamcloud - gitweb
LU-11058 tests: cleanup persistent checksum= in 77k
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 8a4dde1..df7f53f 100755 (executable)
@@ -8,8 +8,8 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: LU-9693 LU-6493 LU-9693 LU-11058
-ALWAYS_EXCEPT="$SANITY_EXCEPT  42a     42b     42c     77k"
+# bug number for skipped test: LU-9693 LU-6493 LU-9693
+ALWAYS_EXCEPT="$SANITY_EXCEPT  42a     42b     42c"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
 # skipped tests: LU-8411 LU-9096 LU-9054 ..
@@ -71,11 +71,6 @@ init_test_env $@
 get_lustre_env
 init_logging
 
-if [[ $MDSCOUNT -gt 1 ]]; then
-       # bug number:    LU-11161
-       ALWAYS_EXCEPT+=" 160g"
-fi
-
 #                                  5          12          (min)"
 [ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 300o"
 
@@ -6662,7 +6657,7 @@ test_65j() { # bug6367
 }
 run_test 65j "set default striping on root directory (bug 6367)="
 
-cleaup_65k() {
+cleanup_65k() {
        rm -rf $DIR/$tdir
        wait_delete_completed
        do_facet $SINGLEMDS "lctl set_param -n \
@@ -7325,6 +7320,9 @@ test_77k() { # LU-10906
                checksum=$(eval $get_checksum)
                [ $checksum -eq $i ] || error "checksum($checksum) != $i"
        done
+       # remove persistent param to avoid races with checksum mountopt below
+       do_facet mgs $LCTL set_param -P -d $cksum_param ||
+               error "failed to delete checksum on MGS"
 
        for opt in "checksum" "nochecksum"; do
                #remount with mount option
@@ -8603,6 +8601,7 @@ test_103a() {
 run_test 103a "acl test"
 
 test_103b() {
+       declare -a pids
        local U
 
        for U in {0..511}; do
@@ -8627,6 +8626,12 @@ test_103b() {
                        error "lfs setstripe -N2 $DIR/$tfile.m$O '$S' != '$O'"
                rm -f $DIR/$tfile.[smp]$0
                } &
+               local pid=$!
+
+               # limit the concurrently running threads to 64. LU-11878
+               local idx=$((U % 64))
+               [ -z "${pids[idx]}" ] || wait ${pids[idx]}
+               pids[idx]=$pid
        done
        wait
 }
@@ -12581,7 +12586,10 @@ test_160g() {
        local nbcl=$(changelog_dump | wc -l)
        [[ $nbcl -eq 0 ]] && error "no changelogs found"
 
-       for param in "changelog_max_idle_indexes=$((nbcl / 2))" \
+       # reduce the max_idle_indexes value to make sure we exceed it
+       max_ndx=$((nbcl / 2 - 1))
+
+       for param in "changelog_max_idle_indexes=$max_ndx" \
                     "changelog_gc=1" \
                     "changelog_min_gc_interval=2" \
                     "changelog_min_free_cat_entries=3"; do
@@ -18469,6 +18477,7 @@ test_311() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
 
        local old_iused=$($LFS df -i | grep OST0000 | awk '{ print $3 }')
+       local mdts=$(comma_list $(mdts_nodes))
 
        mkdir -p $DIR/$tdir
        $LFS setstripe -i 0 -c 1 $DIR/$tdir
@@ -18477,14 +18486,11 @@ test_311() {
        # statfs data is not real time, let's just calculate it
        old_iused=$((old_iused + 1000))
 
-       local count=$(do_facet $SINGLEMDS "lctl get_param -n \
+       local count=$(do_facet $SINGLEMDS "$LCTL get_param -n \
                        osp.*OST0000*MDT0000.create_count")
-       local max_count=$(do_facet $SINGLEMDS "lctl get_param -n \
+       local max_count=$(do_facet $SINGLEMDS "$LCTL get_param -n \
                                osp.*OST0000*MDT0000.max_create_count")
-       for idx in $(seq $MDSCOUNT); do
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.max_create_count=0"
-       done
+       do_nodes $mdts "$LCTL set_param -n osp.*OST0000*.max_create_count=0"
 
        $LFS setstripe -i 0 $DIR/$tdir/$tfile || error "setstripe failed"
        local index=$($LFS getstripe -i $DIR/$tdir/$tfile)
@@ -18492,12 +18498,13 @@ test_311() {
 
        unlinkmany $DIR/$tdir/$tfile. 1000
 
-       for idx in $(seq $MDSCOUNT); do
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.max_create_count=$max_count"
-               do_facet mds$idx "lctl set_param -n \
-                       osp.*OST0000*MDT000?.create_count=$count"
-       done
+       do_nodes $mdts "$LCTL set_param -n \
+                       osp.*OST0000*.max_create_count=$max_count"
+       [ $(lustre_version_code $facet) -lt $(version_code 2.11.56) ] &&
+               do_nodes $mdts "$LCTL set_param -n \
+                               osp.*OST0000*.create_count=$count"
+       do_nodes $mdts "$LCTL get_param osp.*OST0000*.create_count" |
+                       grep "=0" && error "create_count is zero"
 
        local new_iused
        for i in $(seq 120); do
@@ -19420,31 +19427,45 @@ check_lfs_df() {
        local inodes
        local df_out
        local lfs_df_out
+       local tries=100
+       local count=0
+       local passed=false
 
        # blocks or inodes
        [ "$1" == "blocks" ] && inodes= || inodes="-i"
 
-       # read the lines of interest
-       df_out=($(df $inodes $dir | tail -n +2)) ||
-               error "df $inodes $dir | tail -n +2 failed"
-       lfs_df_out=($($LFS df $inodes $dir | grep filesystem_summary:)) ||
-               error "lfs df $inodes $dir | grep filesystem_summary: failed"
-
-       # skip the first substrings of each command output as they are different
-       # <NID>:/<fsname for df, filesystem_summary: for lfs df
-       df_out=(${df_out[@]:1})
-       lfs_df_out=(${lfs_df_out[@]:1})
-
-       # compare the two outputs
-       for i in {0..4}; do
-               [ "${df_out[i]}" != "${lfs_df_out[i]}" ] &&
-                       error "df and lfs df output mismatch:" \
-                             "df${inodes}: ${df_out[*]}," \
-                             "lfs df${inodes}: ${lfs_df_out[*]}"
+       while (( count < tries )); do
+               cancel_lru_locks
+               sync; sleep 0.2
+
+               # read the lines of interest
+               df_out=($(df $inodes $dir | tail -n +2)) ||
+                       error "df $inodes $dir | tail -n +2 failed"
+               lfs_df_out=($($LFS df $inodes $dir | grep summary:)) ||
+                       error "lfs df $inodes $dir | grep summary: failed"
+
+               # skip first substrings of each output as they are different
+               # <NID>:/<fsname for df, filesystem_summary: for lfs df
+               df_out=(${df_out[@]:1})
+               lfs_df_out=(${lfs_df_out[@]:1})
+
+               # compare the two outputs
+               passed=true
+
+               for i in {0..4}; do
+                       [ "${df_out[i]}" != "${lfs_df_out[i]}" ] && passed=false
+               done
+               $passed && break
        done
+
+       $passed || error "df and lfs df $1 output mismatch: "   \
+                        "df ${inodes}: ${df_out[*]}, "         \
+                        "lfs df ${inodes}: ${lfs_df_out[*]}"
 }
 
 test_418() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+
        local dir=$DIR/$tdir
        local numfiles=$((RANDOM % 4096 + 2))
        local numblocks=$((RANDOM % 256 + 1))
@@ -19461,8 +19482,6 @@ test_418() {
        echo "Creating a single file and testing"
        createmany -o $dir/$tfile- 1 &>/dev/null ||
                error "creating 1 file in $dir failed"
-       cancel_lru_locks osc
-       sync; sleep 2
        check_lfs_df blocks $dir
        check_lfs_df inodes $dir
 
@@ -19478,8 +19497,6 @@ test_418() {
                error "dd to $dir/${tfile}-0 failed"
 
        # retest
-       cancel_lru_locks osc
-       sync; sleep 10
        check_lfs_df blocks $dir
        check_lfs_df inodes $dir
 
@@ -19703,7 +19720,7 @@ saved_MGS_MOUNT_OPTS=$MGS_MOUNT_OPTS
 saved_MDS_MOUNT_OPTS=$MDS_MOUNT_OPTS
 saved_OST_MOUNT_OPTS=$OST_MOUNT_OPTS
 
-cleanup_802() {
+cleanup_802a() {
        trap 0
 
        stopall
@@ -19713,7 +19730,7 @@ cleanup_802() {
        setupall
 }
 
-test_802() {
+test_802a() {
 
        [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] ||
        [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] &&
@@ -19726,7 +19743,7 @@ test_802() {
        cp $LUSTRE/tests/test-framework.sh $DIR/$tdir/ ||
                error "(2) Fail to copy"
 
-       trap cleanup_802 EXIT
+       trap cleanup_802a EXIT
 
        # sync by force before remount as readonly
        sync; sync_all_data; sleep 3; sync_all_data
@@ -19755,9 +19772,40 @@ test_802() {
        diff $LUSTRE/tests/test-framework.sh $DIR/$tdir/test-framework.sh ||
                error "(7) Read should succeed under ro mode"
 
-       cleanup_802
+       cleanup_802a
+}
+run_test 802a "simulate readonly device"
+
+test_802b() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+        remote_mds_nodsh && skip "remote MDS with nodsh"
+
+       do_facet $SINGLEMDS $LCTL get_param mdt.*.readonly ||
+               skip "readonly option not available"
+
+       $LFS mkdir -i 0 -c 1 $DIR/$tdir || error "(1) fail to mkdir"
+
+       cp $LUSTRE/tests/test-framework.sh $DIR/$tdir/ ||
+               error "(2) Fail to copy"
+
+       # write back all cached data before setting MDT to readonly
+       cancel_lru_locks
+       sync_all_data
+
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=1
+       stack_trap "do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=0" EXIT
+
+       echo "Modify should be refused"
+       touch $DIR/$tdir/guard && error "(6) Touch should fail under ro mode"
+
+       echo "Read should be allowed"
+       diff $LUSTRE/tests/test-framework.sh $DIR/$tdir/test-framework.sh ||
+               error "(7) Read should succeed under ro mode"
+
+       # disable readonly
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.readonly=0
 }
-run_test 802 "simulate readonly device"
+run_test 802b "be able to set MDTs to readonly"
 
 test_803() {
        [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs"
@@ -19972,7 +20020,7 @@ test_806() {
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
        save_lustre_params client "llite.*.xattr_cache" > $save
        lctl set_param llite.*.xattr_cache=0
-       stack_trap "restore_lustre_params < $save" EXIT
+       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
 
        # single-threaded write
        echo "Test SOM for single-threaded write"
@@ -20069,7 +20117,7 @@ test_807() {
        local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
        save_lustre_params client "llite.*.xattr_cache" > $save
        lctl set_param llite.*.xattr_cache=0
-       stack_trap "restore_lustre_params < $save" EXIT
+       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
 
        rm -rf $DIR/$tdir || error "rm $tdir failed"
        mkdir -p $DIR/$tdir || error "mkdir $tdir failed"