Whamcloud - gitweb
LU-14789 tests: make sanity 133f and 133g working
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 665bbd7..744e6d6 100755 (executable)
@@ -92,6 +92,8 @@ if [ "$ost1_FSTYPE" = "zfs" ]; then
        ALWAYS_EXCEPT+="                130a 130b 130c 130d 130e 130f 130g"
 fi
 
+proc_regexp="/{proc,sys}/{fs,sys,kernel/debug}/{lustre,lnet}/"
+
 # Get the SLES distro version
 #
 # Returns a version string that should only be used in comparing
@@ -5559,7 +5561,7 @@ test_51b() {
        # cleanup the directory
        rm -fr $dir
 
-       test_mkdir -c1 $dir
+       mkdir_on_mdt -i $((RANDOM % MDSCOUNT)) $dir
 
        $LFS df
        $LFS df -i
@@ -13832,8 +13834,12 @@ test_133f() {
        $LCTL get_param -R '*' &> /dev/null
 
        # Verifing writability with badarea_io.
+       local proc_dirs=$(eval \ls -d $proc_regexp 2>/dev/null)
+       local skipped_params='force_lbug|changelog_mask|daemon_file'
        $LCTL list_param -FR '*' | grep '=' | tr -d = |
-               egrep -v 'force_lbug|changelog_mask' | xargs badarea_io ||
+               egrep -v "$skipped_params" |
+               xargs -n 1 find $proc_dirs -name |
+               xargs -n 1 badarea_io ||
                error "client badarea_io failed"
 
        # remount the FS in case writes/reads /proc break the FS
@@ -13846,6 +13852,8 @@ test_133g() {
        remote_mds_nodsh && skip "remote MDS with nodsh"
        remote_ost_nodsh && skip "remote OST with nodsh"
 
+       local proc_dirs=$(eval \ls -d $proc_regexp 2>/dev/null)
+       local skipped_params="'force_lbug|changelog_mask|daemon_file'"
        local facet
        for facet in mds1 ost1; do
                local facet_ver=$(lustre_version_code $facet)
@@ -13856,8 +13864,9 @@ test_133g() {
                fi
                if [ $facet_ver -ge $(version_code 2.5.54) ]; then
                        do_facet $facet "$LCTL list_param -FR '*' | grep '=' |
-                               tr -d = | egrep -v 'force_lbug|changelog_mask' |
-                               xargs badarea_io" ||
+                               tr -d = | egrep -v $skipped_params |
+                               xargs -n 1 find $proc_dirs -name |
+                               xargs -n 1 badarea_io" ||
                                        error "$facet badarea_io failed"
                else
                        skip_noexit "$facet: too old lustre for get_param -R"
@@ -14865,35 +14874,35 @@ test_154f() {
        [ -n "$FILESET" ] && skip "SKIP due to FILESET set"
 
        # create parent directory on a single MDT to avoid cross-MDT hardlinks
-       test_mkdir -p -c1 $DIR/$tdir/d
+       mkdir_on_mdt0 $DIR/$tdir
        # test dirs inherit from its stripe
-       mkdir -p $DIR/$tdir/d/foo1 || error "mkdir error"
-       mkdir -p $DIR/$tdir/d/foo2 || error "mkdir error"
-       cp /etc/hosts $DIR/$tdir/d/foo1/$tfile
-       ln $DIR/$tdir/d/foo1/$tfile $DIR/$tdir/d/foo2/link
+       mkdir -p $DIR/$tdir/foo1 || error "mkdir error"
+       mkdir -p $DIR/$tdir/foo2 || error "mkdir error"
+       cp /etc/hosts $DIR/$tdir/foo1/$tfile
+       ln $DIR/$tdir/foo1/$tfile $DIR/$tdir/foo2/link
        touch $DIR/f
 
        # get fid of parents
-       local FID0=$($LFS path2fid $DIR/$tdir/d)
-       local FID1=$($LFS path2fid $DIR/$tdir/d/foo1)
-       local FID2=$($LFS path2fid $DIR/$tdir/d/foo2)
+       local FID0=$($LFS path2fid $DIR/$tdir)
+       local FID1=$($LFS path2fid $DIR/$tdir/foo1)
+       local FID2=$($LFS path2fid $DIR/$tdir/foo2)
        local FID3=$($LFS path2fid $DIR)
 
        # check that path2fid --parents returns expected <parent_fid>/name
        # 1) test for a directory (single parent)
-       local parent=$($LFS path2fid --parents $DIR/$tdir/d/foo1)
+       local parent=$($LFS path2fid --parents $DIR/$tdir/foo1)
        [ "$parent" == "$FID0/foo1" ] ||
                error "expected parent: $FID0/foo1, got: $parent"
 
        # 2) test for a file with nlink > 1 (multiple parents)
-       parent=$($LFS path2fid --parents $DIR/$tdir/d/foo1/$tfile)
+       parent=$($LFS path2fid --parents $DIR/$tdir/foo1/$tfile)
        echo "$parent" | grep -F "$FID1/$tfile" ||
                error "$FID1/$tfile not returned in parent list"
        echo "$parent" | grep -F "$FID2/link" ||
                error "$FID2/link not returned in parent list"
 
        # 3) get parent by fid
-       local file_fid=$($LFS path2fid $DIR/$tdir/d/foo1/$tfile)
+       local file_fid=$($LFS path2fid $DIR/$tdir/foo1/$tfile)
        parent=$($LFS path2fid --parents $MOUNT/.lustre/fid/$file_fid)
        echo "$parent" | grep -F "$FID1/$tfile" ||
                error "$FID1/$tfile not returned in parent list (by fid)"
@@ -14915,7 +14924,7 @@ test_154f() {
        lctl set_param llite.*.xattr_cache 1
 
        # 6.1) linkea update on rename
-       mv $DIR/$tdir/d/foo1/$tfile $DIR/$tdir/d/foo2/$tfile.moved
+       mv $DIR/$tdir/foo1/$tfile $DIR/$tdir/foo2/$tfile.moved
 
        # get parents by fid
        parent=$($LFS path2fid --parents $MOUNT/.lustre/fid/$file_fid)
@@ -14927,7 +14936,7 @@ test_154f() {
                error "$FID2/$tfile.moved is not in parent list"
 
        # 6.2) linkea update on unlink
-       rm -f $DIR/$tdir/d/foo2/link
+       rm -f $DIR/$tdir/foo2/link
        parent=$($LFS path2fid --parents $MOUNT/.lustre/fid/$file_fid)
        # foo2/link should no longer be returned in parent list
        echo "$parent" | grep -F "$FID2/link" &&
@@ -14947,7 +14956,7 @@ test_154g()
           $CLIENT_VERSION -gt $(version_code 2.6.99) ]] ||
                skip "Need MDS version at least 2.6.92"
 
-       mkdir -p $DIR/$tdir
+       mkdir_on_mdt0 $DIR/$tdir
        llapi_fid_test -d $DIR/$tdir
 }
 run_test 154g "various llapi FID tests"
@@ -20336,7 +20345,8 @@ test_247f() {
        mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed"
        $LFS mkdir -i $((MDSCOUNT - 1)) $DIR/$tdir/remote ||
                error "mkdir remote failed"
-       mkdir $DIR/$tdir/remote/subdir || error "mkdir remote/subdir failed"
+       $LFS mkdir -i $((MDSCOUNT - 1)) $DIR/$tdir/remote/subdir ||
+               error "mkdir remote/subdir failed"
        $LFS mkdir -i 0 -c $MDSCOUNT $DIR/$tdir/striped ||
                error "mkdir striped failed"
        mkdir $DIR/$tdir/striped/subdir || error "mkdir striped/subdir failed"
@@ -22647,9 +22657,6 @@ test_300g() {
                stripe_count=$($LFS getdirstripe -c $dir)
                [ $stripe_count -eq 0 ] ||
                        error "expect 1 get $stripe_count for $dir"
-               stripe_index=$($LFS getdirstripe -i $dir)
-               [ $stripe_index -eq 0 ] ||
-                       error "expect 0 get $stripe_index for $dir"
        done
 }
 run_test 300g "check default striped directory for normal directory"
@@ -24067,7 +24074,6 @@ test_401a() { #LU-7437
        #count the number of parameters by "list_param -R"
        local params=$($LCTL list_param -R '*' 2>/dev/null | wc -l)
        #count the number of parameters by listing proc files
-       local proc_regexp="/{proc,sys}/{fs,sys,kernel/debug}/{lustre,lnet}/"
        local proc_dirs=$(eval \ls -d $proc_regexp 2>/dev/null)
        echo "proc_dirs='$proc_dirs'"
        [ -n "$proc_dirs" ] || error "no proc_dirs on $HOSTNAME"
@@ -24493,6 +24499,76 @@ test_412() {
 }
 run_test 412 "mkdir on specific MDTs"
 
+generate_uneven_mdts() {
+       local threshold=$1
+       local ffree
+       local bavail
+       local max
+       local min
+       local max_index
+       local min_index
+       local tmp
+       local i
+
+       echo
+       echo "Check for uneven MDTs: "
+
+       ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-[^M]*.filesfree))
+       bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-[^M]*.kbytesavail))
+       bsize=$(lctl get_param -n mdc.*MDT0000*.blocksize)
+
+       max=$(((${ffree[0]} >> 8) * (${bavail[0]} * bsize >> 16)))
+       min=$(((${ffree[0]} >> 8) * (${bavail[0]} * bsize >> 16)))
+       max_index=0
+       min_index=0
+       for ((i = 1; i < ${#ffree[@]}; i++)); do
+               tmp=$(((${ffree[i]} >> 8) * (${bavail[i]} * bsize >> 16)))
+               if [ $tmp -gt $max ]; then
+                       max=$tmp
+                       max_index=$i
+               fi
+               if [ $tmp -lt $min ]; then
+                       min=$tmp
+                       min_index=$i
+               fi
+       done
+
+       # Check if we need to generate uneven MDTs
+       local diff=$(((max - min) * 100 / min))
+       local testdir=$DIR/$tdir-fillmdt
+
+       mkdir -p $testdir
+
+       i=0
+       while (( diff < threshold )); do
+               # generate uneven MDTs, create till $threshold% diff
+               echo -n "weight diff=$diff% must be > $threshold% ..."
+               echo "Fill MDT$min_index with 100 files: loop $i"
+               testdir=$DIR/$tdir-fillmdt/$i
+               [ -d $testdir ] || $LFS mkdir -i $min_index $testdir ||
+                       error "mkdir $testdir failed"
+               $LFS setstripe -E 1M -L mdt $testdir ||
+                       error "setstripe $testdir failed"
+               for F in f.{0..99}; do
+                       dd if=/dev/zero of=$testdir/$F bs=1M count=1 > \
+                               /dev/null 2>&1 || error "dd $F failed"
+               done
+
+               ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-*.filesfree))
+               bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-*.kbytesavail))
+               max=$(((${ffree[max_index]} >> 8) * \
+                       (${bavail[max_index]} * bsize >> 16)))
+               min=$(((${ffree[min_index]} >> 8) * \
+                       (${bavail[min_index]} * bsize >> 16)))
+               diff=$(((max - min) * 100 / min))
+               i=$((i + 1))
+       done
+
+       echo "MDT filesfree available: ${ffree[@]}"
+       echo "MDT blocks available: ${bavail[@]}"
+       echo "weight diff=$diff%"
+}
+
 test_qos_mkdir() {
        local mkdir_cmd=$1
        local stripe_count=$2
@@ -24515,11 +24591,11 @@ test_qos_mkdir() {
        lmv_qos_threshold_rr=${lmv_qos_threshold_rr%%%}
        lmv_qos_maxage=$($LCTL get_param -n lmv.*.qos_maxage)
        stack_trap "$LCTL set_param \
-               lmv.*.qos_prio_free=$lmv_qos_prio_free > /dev/null" RETURN
+               lmv.*.qos_prio_free=$lmv_qos_prio_free > /dev/null"
        stack_trap "$LCTL set_param \
-               lmv.*.qos_threshold_rr=$lmv_qos_threshold_rr > /dev/null" RETURN
+               lmv.*.qos_threshold_rr=$lmv_qos_threshold_rr > /dev/null"
        stack_trap "$LCTL set_param \
-               lmv.*.qos_maxage=$lmv_qos_maxage > /dev/null" RETURN
+               lmv.*.qos_maxage=$lmv_qos_maxage > /dev/null"
 
        lod_qos_prio_free=$(do_facet mds1 $LCTL get_param -n \
                lod.$FSNAME-MDT0000-mdtlov.mdt_qos_prio_free | head -n1)
@@ -24530,12 +24606,11 @@ test_qos_mkdir() {
        lod_qos_maxage=$(do_facet mds1 $LCTL get_param -n \
                lod.$FSNAME-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }')
        stack_trap "do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_prio_free=$lod_qos_prio_free > /dev/null" RETURN
+               lod.*.mdt_qos_prio_free=$lod_qos_prio_free > /dev/null"
        stack_trap "do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_threshold_rr=$lod_qos_threshold_rr > /dev/null" \
-               RETURN
+               lod.*.mdt_qos_threshold_rr=$lod_qos_threshold_rr > /dev/null"
        stack_trap "do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_maxage=$lod_qos_maxage > /dev/null" RETURN
+               lod.*.mdt_qos_maxage=$lod_qos_maxage > /dev/null"
 
        $LCTL set_param lmv.*.qos_threshold_rr=100 > /dev/null
        do_nodes $mdts $LCTL set_param lod.*.mdt_qos_threshold_rr=100 > /dev/null
@@ -24558,6 +24633,7 @@ test_qos_mkdir() {
                echo "Mkdir (stripe_count $stripe_count) roundrobin:" ||
                echo "Mkdir (stripe_count $stripe_count) on stripe $stripe_index"
 
+       stack_trap "unlinkmany -d $testdir/subdir $((100 * MDSCOUNT))"
        for (( i = 0; i < 100 * MDSCOUNT; i++ )); do
                eval $mkdir_cmd $testdir/subdir$i ||
                        error "$mkdir_cmd subdir$i failed"
@@ -24588,10 +24664,6 @@ test_qos_mkdir() {
                fi
        done
 
-       $LCTL set_param lmv.*.qos_threshold_rr=$lmv_qos_threshold_rr > /dev/null
-       do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_threshold_rr=$lod_qos_threshold_rr > /dev/null
-
        echo
        echo "Check for uneven MDTs: "
 
@@ -24628,44 +24700,15 @@ test_qos_mkdir() {
        (( ${ffree[min_index]} < 100000000 )) ||
                skip "too many free files in MDT$min_index"
 
-       # Check if we need to generate uneven MDTs
-       local threshold=50
-       local diff=$(((max - min) * 100 / min))
-       local value="$(generate_string 1024)"
-
-       i=0
-       while [ $diff -lt $threshold ]; do
-               # generate uneven MDTs, create till $threshold% diff
-               echo -n "weight diff=$diff% must be > $threshold% ..."
-               count=$((${ffree[min_index]} / 100))
-               # 8 sec per 10000 files in vm
-               (( $count < 11000 )) || [ "$SLOW" != "no" ] ||
-                       skip "$count files to create"
-               echo "Fill MDT$min_index with $count files: loop $i"
-               [ -d $DIR/$tdir-MDT$min_index ] ||
-                       $LFS mkdir -i $min_index $DIR/$tdir-MDT$min_index ||
-                       error "mkdir $tdir-MDT$min_index failed"
-               createmany -d $DIR/$tdir-MDT$min_index/d.$i. $count ||
-                       error "create d$count failed"
-
-               ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-*.filesfree))
-               bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-*.kbytesavail))
-               max=$(((${ffree[max_index]} >> 8) * \
-                       (${bavail[max_index]} * bsize >> 16)))
-               min=$(((${ffree[min_index]} >> 8) * \
-                       (${bavail[min_index]} * bsize >> 16)))
-               diff=$(((max - min) * 100 / min))
-               i=$((i + 1))
-       done
-
        echo "MDT filesfree available: ${ffree[@]}"
        echo "MDT blocks available: ${bavail[@]}"
-       echo "weight diff=$diff%"
-
+       echo "weight diff=$(((max - min) * 100 / min))%"
        echo
        echo "Mkdir (stripe_count $stripe_count) with balanced space usage:"
 
+       $LCTL set_param lmv.*.qos_threshold_rr=0 > /dev/null
        $LCTL set_param lmv.*.qos_prio_free=100 > /dev/null
+       do_nodes $mdts $LCTL set_param lod.*.mdt_qos_threshold_rr=0 > /dev/null
        do_nodes $mdts $LCTL set_param lod.*.mdt_qos_prio_free=100 > /dev/null
        # decrease statfs age, so that it can be updated in time
        $LCTL set_param lmv.*.qos_maxage=1 > /dev/null
@@ -24674,8 +24717,10 @@ test_qos_mkdir() {
        sleep 1
 
        testdir=$DIR/$tdir-s$stripe_count/qos
+       local num=200
 
-       for (( i = 0; i < 100 * $MDSCOUNT; i++ )); do
+       stack_trap "unlinkmany -d $testdir/subdir $((num * MDSCOUNT))"
+       for (( i = 0; i < num * MDSCOUNT; i++ )); do
                eval $mkdir_cmd $testdir/subdir$i ||
                        error "$mkdir_cmd subdir$i failed"
        done
@@ -24695,17 +24740,17 @@ test_qos_mkdir() {
        min=$($LFS getdirstripe -i $testdir/* | grep -c "^$min_index$")
 
        # D-value should > 10% of averge
-       (( $max - $min >= 10 )) ||
-               error "subdirs shouldn't be evenly distributed: $max - $min < 10"
+       (( max - min >= num / 10 )) ||
+               error "subdirs shouldn't be evenly distributed: $max - $min < $((num / 10))"
 
-       # ditto
-       if [ $stripe_count -gt 1 ]; then
+       # 5% for stripes
+       if (( stripe_count > 1 )); then
                max=$($LFS getdirstripe $testdir/* |
                      grep -c -P "^\s+$max_index\t")
                min=$($LFS getdirstripe $testdir/* |
-                     grep -c -P "^\s+$min_index\t")
-               (( $max - $min >= 10 * $stripe_count )) ||
-                       error "stripes shouldn't be evenly distributed: $max - $min < 10 * $stripe_count"
+                       grep -c -P "^\s+$min_index\t")
+               (( max - min >= num * stripe_count / 20 )) ||
+                       error "stripes shouldn't be evenly distributed: $max - $min < $((num / 20)) * $stripe_count"
        fi
 }
 
@@ -24740,6 +24785,7 @@ test_413a() {
 
        local stripe_count
 
+       generate_uneven_mdts 100
        for stripe_count in $(seq 1 $((MDSCOUNT - 1))); do
                mkdir $DIR/$tdir-s$stripe_count || error "mkdir failed"
                mkdir $DIR/$tdir-s$stripe_count/rr || error "mkdir failed"
@@ -24760,6 +24806,7 @@ test_413b() {
        local testdir
        local stripe_count
 
+       generate_uneven_mdts 100
        for stripe_count in $(seq 1 $((MDSCOUNT - 1))); do
                testdir=$DIR/$tdir-s$stripe_count
                mkdir $testdir || error "mkdir $testdir failed"
@@ -24814,6 +24861,22 @@ test_413c() {
 }
 run_test 413c "mkdir with default LMV max inherit rr"
 
+test_413z() {
+       local pids=""
+       local subdir
+       local pid
+
+       for subdir in $(\ls -1 -d $DIR/d413*-fillmdt/*); do
+               unlinkmany $subdir/f. 100 &
+               pids="$pids $!"
+       done
+
+       for pid in $pids; do
+               wait $pid
+       done
+}
+run_test 413z "413 test cleanup"
+
 test_414() {
 #define OBD_FAIL_PTLRPC_BULK_ATTACH      0x521
        $LCTL set_param fail_loc=0x80000521