Whamcloud - gitweb
LU-4028 quota: fix output of 'lfs quota'
[fs/lustre-release.git] / lustre / tests / sanity-quota.sh
index a0ec174..634d7f9 100644 (file)
@@ -43,12 +43,16 @@ if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.50) ]; then
        exec $LUSTRE/tests/sanity-quota-old.sh
 fi
 
-# if e2fsprogs support quota feature?
-if [ $(facet_fstype $SINGLEMDS) == ldiskfs ] && \
-       ! $DEBUGFS -c -R supported_features | grep -q 'quota'; then
+# Does e2fsprogs support quota feature?
+if [ $(facet_fstype $SINGLEMDS) == ldiskfs ] &&
+       do_facet $SINGLEMDS "! $DEBUGFS -c -R supported_features |
+               grep -q 'quota'"; then
        skip "e2fsprogs doesn't support quota" && exit 0
 fi
 
+# bug number for skipped test: LU-4515
+ALWAYS_EXCEPT="$ALWAYS_EXCEPT  34"
+
 if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
 # bug number for skipped test:        LU-2872 LU-2836 LU-2836 LU-2059
        ALWAYS_EXCEPT="$ALWAYS_EXCEPT 1       3       6       7d"
@@ -85,21 +89,18 @@ SHOW_QUOTA_INFO_GROUP="$LFS quota -t -g $DIR"
 build_test_filter
 
 lustre_fail() {
-        local fail_node=$1
+       local fail_node=$1
        local fail_loc=$2
        local fail_val=${3:-0}
+       local NODES=
 
-       if [ $fail_node == "mds" ] || [ $fail_node == "mds_ost" ]; then
-               do_facet $SINGLEMDS "lctl set_param fail_val=$fail_val"
-               do_facet $SINGLEMDS "lctl set_param fail_loc=$fail_loc"
-       fi
+       case $fail_node in
+       mds_ost|mdt_ost) NODES="$(comma_list $(mdts_nodes) $(osts_nodes))";;
+       mds|mdt) NODES="$(comma_list $(mdts_nodes))";;
+       ost) NODES="$(comma_list $(osts_nodes))";;
+       esac
 
-       if [ $fail_node == "ost" ] || [ $fail_node == "mds_ost" ]; then
-               for num in `seq $OSTCOUNT`; do
-                       do_facet ost$num "lctl set_param fail_val=$fail_val"
-                       do_facet ost$num "lctl set_param fail_loc=$fail_loc"
-               done
-       fi
+       do_nodes $NODES "lctl set_param fail_val=$fail_val fail_loc=$fail_loc"
 }
 
 RUNAS="runas -u $TSTID -g $TSTID"
@@ -369,7 +370,7 @@ test_quota_performance() {
            rate=$((size * 1024 / delta))
            if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
                # LU-2872 - see LU-2887 for fix
-               [ $rate -gt 256 ] ||
+               [ $rate -gt 64 ] ||
                        error "SLOW IO for $TSTUSR (user): $rate KB/sec"
            else
                [ $rate -gt 1024 ] ||
@@ -488,7 +489,8 @@ test_2() {
 
        [ "$SLOW" = "no" ] && LIMIT=1024 # 1k inodes
 
-       local FREE_INODES=$(lfs_df -i | grep "summary" | awk '{print $4}')
+       local FREE_INODES=$(mdt_free_inodes 0)
+       echo "$FREE_INODES free inodes on master MDT"
        [ $FREE_INODES -lt $LIMIT ] &&
                skip "not enough free inodes $FREE_INODES required $LIMIT" &&
                return
@@ -928,9 +930,8 @@ test_6() {
 
        rm -f $TMP/lustre-log-${TESTNAME}.log
 
-       # write should continue & succeed
+       # write should continue then fail with EDQUOT
        local count=0
-       local o_size=$(stat -c %s $TESTFILE)
        local c_size
        while [ true ]; do
                if ! ps -p ${DDPID} > /dev/null 2>&1; then break; fi
@@ -940,13 +941,8 @@ test_6() {
                count=$((count + 1))
                if [ $((count % 30)) -eq 0 ]; then
                        c_size=$(stat -c %s $TESTFILE)
-                       if [ $c_size -eq $o_size ]; then
-                               quota_error u $TSTUSR "file not growed" \
-                               "in 30 seconds $o_size/$c_size"
-                       else
-                               echo "Waiting $count secs. $o_size/$c_size"
-                               o_size=$c_size
-                       fi
+                       echo "Waiting $count secs. $c_size"
+                       $SHOW_QUOTA_USER
                fi
                sleep 1
        done
@@ -2014,6 +2010,32 @@ test_27b() { # b20200
 }
 run_test 27b "lfs quota/setquota should handle user/group ID (b20200)"
 
+test_27c() {
+       local limit
+
+       $LFS setquota -u $TSTID -b 30M -B 3T $DIR ||
+               error "lfs setquota failed"
+
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $3}')
+       [ $limit != "30M" ] && error "softlimit $limit isn't human-readable"
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $4}')
+       [ $limit != "3T" ] && error "hardlimit $limit isn't human-readable"
+
+       $LFS setquota -u $TSTID -b 1500M -B 18500G $DIR ||
+               error "lfs setquota for $TSTID failed"
+
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $3}')
+       [ $limit != "1.465G" ] && error "wrong softlimit $limit"
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $4}')
+       [ $limit != "18.07T" ] && error "wrong hardlimit $limit"
+
+       $LFS quota -u $TSTID -v -h $DIR | grep -q "Total allocated" ||
+               error "total allocated inode/block limit not printed"
+
+       resetquota -u $TSTUSR
+}
+run_test 27c "lfs quota should support human-readable output"
+
 test_30() {
        local output
        local LIMIT=4 # 4MB
@@ -2039,11 +2061,11 @@ test_30() {
        # over-quota flag has not yet settled since we do not trigger async
        # events based on grace time period expiration
        $SHOW_QUOTA_USER
-       $RUNAS $DD of=$TESTFILE conv=notrunc oflag=append count=1 || true
+       $RUNAS $DD of=$TESTFILE conv=notrunc oflag=append count=4 || true
        cancel_lru_locks osc
        # now over-quota flag should be settled and further writes should fail
        $SHOW_QUOTA_USER
-       $RUNAS $DD of=$TESTFILE conv=notrunc oflag=append count=1 &&
+       $RUNAS $DD of=$TESTFILE conv=notrunc oflag=append count=4 &&
                error "grace times were reset"
        # cleanup
        cleanup_quota_test
@@ -2262,7 +2284,7 @@ test_36() {
        do_node $mdt0_node mkdir $mntpt/OBJECTS
        do_node $mdt0_node cp $LUSTRE/tests/admin_quotafile_v2.usr $mntpt/OBJECTS
        do_node $mdt0_node cp $LUSTRE/tests/admin_quotafile_v2.grp $mntpt/OBJECTS
-       do_node $mdt0_node umount -f $mntpt
+       do_node $mdt0_node umount -d -f $mntpt
 
        echo "Setup all..."
        setupall