X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-quota.sh;h=797410ed07e9f4467e76396a33044b7ba9d47037;hb=ddea41245e375222fd272d32a77b4f31ad522a96;hp=4391e0e8c9d125821bcdf27430398fc3a52dc924;hpb=647b4811c8aa1c50ec8c8285d89531940cbff389;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-quota.sh b/lustre/tests/sanity-quota.sh index 4391e0e..797410e 100644 --- a/lustre/tests/sanity-quota.sh +++ b/lustre/tests/sanity-quota.sh @@ -41,6 +41,8 @@ IUNIT_SZ=${IUNIT_SZ:-10} # min inode quota unit MAX_DQ_TIME=604800 MAX_IQ_TIME=604800 +unset ENABLE_QUOTA + TRACE=${TRACE:-""} LUSTRE=${LUSTRE:-`dirname $0`/..} . $LUSTRE/tests/test-framework.sh @@ -70,7 +72,7 @@ SHOW_QUOTA_USER="$LFS quota -v -u $TSTUSR $DIR" SHOW_QUOTA_USER2="$LFS quota -v -u $TSTUSR2 $DIR" SHOW_QUOTA_GROUP="$LFS quota -v -g $TSTUSR $DIR" SHOW_QUOTA_GROUP2="$LFS quota -v -g $TSTUSR2 $DIR" -SHOW_QUOTA_INFO="$LFS quota -t $DIR" +SHOW_QUOTA_INFO="$LFS quota -t -u $DIR; $LFS quota -t -g $DIR" # control the time of tests cycle=30 @@ -171,9 +173,32 @@ run_test_with_stat() { # resetquota -g groupname resetquota() { - [ "$#" != 2 ] && error "resetquota: wrong number of arguments: $#" - [ "$1" != "-u" -a "$1" != "-g" ] && error "resetquota: wrong specifier $1 passed" - $LFS setquota "$1" "$2" -b 0 -B 0 -i 0 -I 0 $MOUNT || error "resetquota failed" + [ "$#" != 2 ] && error "resetquota: wrong number of arguments: $#" + [ "$1" != "-u" -a "$1" != "-g" ] && error "resetquota: wrong specifier $1 passed" + + count=0 + if at_is_valid && at_is_enabled; then + timeout=$(at_max_get mds) + else + timeout=$(lctl get_param -n timeout) + fi + + while [ $((count++)) -lt $timeout ]; do + $LFS setquota "$1" "$2" -b 0 -B 0 -i 0 -I 0 $MOUNT + RC=$? + if [ $RC -ne 0 ]; then + if [ $RC -eq 240 ]; then # 240 means -EBUSY + log "resetquota is blocked for quota master recovery, retry after 1 sec" + sleep 1 + continue + else + error "resetquota failed: $RC" + fi + fi + break + done + + [ $count -lt $timeout ] || error "resetquota timeout: $timeout" } quota_scan() { @@ -213,12 +238,20 @@ quota_show_check() { if [ "$LOCAL_BF" == "a" -o "$LOCAL_BF" == "b" ]; then USAGE="`$LFS quota -$LOCAL_UG $LOCAL_ID $DIR | awk '/^.*'$PATTERN'.*[[:digit:]+][[:space:]+]/ { print $2 }'`" - [ $USAGE -ne 0 ] && quota_log $LOCAL_UG $LOCAL_ID "System is not clean for block ($LOCAL_UG:$LOCAL_ID:$USAGE)." + if [ -z $USAGE ]; then + quota_error $LOCAL_UG $LOCAL_ID "System is error when query quota for block ($LOCAL_UG:$LOCAL_ID)." + else + [ $USAGE -ne 0 ] && quota_log $LOCAL_UG $LOCAL_ID "System is not clean for block ($LOCAL_UG:$LOCAL_ID:$USAGE)." + fi fi if [ "$LOCAL_BF" == "a" -o "$LOCAL_BF" == "f" ]; then USAGE="`$LFS quota -$LOCAL_UG $LOCAL_ID $DIR | awk '/^.*'$PATTERN'.*[[:digit:]+][[:space:]+]/ { print $5 }'`" - [ $USAGE -ne 0 ] && quota_log $LOCAL_UG $LOCAL_ID "System is not clean for file ($LOCAL_UG:$LOCAL_ID:$USAGE)." + if [ -z $USAGE ]; then + quota_error $LOCAL_UG $LOCAL_ID "System is error when query quota for file ($LOCAL_UG:$LOCAL_ID)." + else + [ $USAGE -ne 0 ] && quota_log $LOCAL_UG $LOCAL_ID "System is not clean for file ($LOCAL_UG:$LOCAL_ID:$USAGE)." + fi fi } @@ -691,37 +724,76 @@ test_6() { chown $TSTUSR.$TSTUSR $FILEB echo " Exceed quota limit ..." - RUNDD="$RUNAS dd if=/dev/zero of=$FILEB bs=$BLK_SZ" + RUNDD="$RUNAS dd if=/dev/zero of=$FILEA bs=$BLK_SZ" $RUNDD count=$((LIMIT - BUNIT_SZ * OSTCOUNT)) || \ - quota_error a $TSTUSR "write fileb failure, but expect success" + quota_error a $TSTUSR "write filea failure, but expect success" cancel_lru_locks osc $SHOW_QUOTA_USER $SHOW_QUOTA_GROUP $RUNDD seek=$LIMIT count=$((BUNIT_SZ * OSTCOUNT)) && \ - quota_error a $TSTUSR "write fileb success, but expect EDQUOT" + quota_error a $TSTUSR "write filea success, but expect EDQUOT" cancel_lru_locks osc - echo " Write to OST0 return EDQUOT" + echo " Write to OST1 return EDQUOT" # this write maybe cache write, ignore it's failure - RUNDD="$RUNAS dd if=/dev/zero of=$FILEA bs=$BLK_SZ" + RUNDD="$RUNAS dd if=/dev/zero of=$FILEB bs=$BLK_SZ" $RUNDD count=$(($BUNIT_SZ * 2)) || true cancel_lru_locks osc $SHOW_QUOTA_USER $SHOW_QUOTA_GROUP $RUNDD count=$((BUNIT_SZ * 2)) seek=$((BUNIT_SZ *2)) && \ - quota_error a $TSTUSR "write filea success, but expect EDQUOT" + quota_error a $TSTUSR "write fileb success, but expect EDQUOT" - echo " Remove fileb to let OST1 release quota" - rm -f $FILEB - sync; sleep 10; sync; # need to allow journal commit for small fs + echo " Remove filea to let OST0 release quota" + rm -f $FILEA + + if at_is_valid && at_is_enabled; then + timeout=$(at_max_get mds) + else + timeout=$(lctl get_param -n timeout) + fi + count=$((timeout / 5)) + OST0_UUID=`do_facet ost1 $LCTL dl | grep -m1 obdfilter | awk '{print $((NF-1))}'` + + while [ $((count--)) -gt 0 ]; do + sync && sleep 5 + + OST0_QUOTA_HOLD=`$LFS quota -o $OST0_UUID -u $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $3 }'` + if [ -z $OST0_QUOTA_HOLD ]; then + error "System is error when query quota for block (U:$TSTUSR)." + else + [ $OST0_QUOTA_HOLD -gt $BUNIT_SZ ] && continue + fi + + break + done + + [ ! $count -gt 0 ] && error "Release quota for block timeout (U:$TSTUSR)." + $SHOW_QUOTA_USER + + while [ $((count--)) -gt 0 ]; do + sync && sleep 5 - echo " Write to OST0" + OST0_QUOTA_HOLD=`$LFS quota -o $OST0_UUID -g $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $3 }'` + if [ -z $OST0_QUOTA_HOLD ]; then + error "System is error when query quota for block (G:$TSTUSR)." + else + [ $OST0_QUOTA_HOLD -gt $BUNIT_SZ ] && continue + fi + + break + done + + [ ! $count -gt 0 ] && error "Release quota for block timeout (G:$TSTUSR)." + $SHOW_QUOTA_GROUP + + echo " Write to OST1" $RUNDD count=$((LIMIT - BUNIT_SZ * OSTCOUNT)) || \ - quota_error a $TSTUSR "write filea failure, expect success" + quota_error a $TSTUSR "write fileb failure, expect success" echo " Done" # cleanup - rm -f $FILEA + rm -f $FILEB sync; sleep 3; sync; resetquota -u $TSTUSR @@ -1194,13 +1266,6 @@ test_14a() { # was test_14 b=12223 -- setting quota on root } run_test_with_stat 14a "test setting quota on root ===" -# save quota version (both administrative and operational quotas) -quota_save_version() { - do_facet mgs "lctl conf_param ${FSNAME}-MDT*.mdd.quota_type=$1" - do_facet mgs "lctl conf_param ${FSNAME}-OST*.ost.quota_type=$1" - sleep 5 -} - test_15(){ LIMIT=$((24 * 1024 * 1024 * 1024 * 1024)) # 24 TB PATTERN="`echo $DIR | sed 's/\//\\\\\//g'`" @@ -1402,15 +1467,18 @@ test_18() { sleep 1 done log "(dd_pid=$DDPID, time=$count, timeout=$timeout)" + sync + cancel_lru_locks mdc + cancel_lru_locks osc testfile_size=$(stat -c %s $TESTFILE) [ $testfile_size -ne $((BLK_SZ * 1024 * 100)) ] && \ quota_error u $TSTUSR "expect $((BLK_SZ * 1024 * 100)), got ${testfile_size}. Verifying file failed!" - rm -f $TESTFILE - sync; sleep 3; sync; + $SHOW_QUOTA_USER + rm -f $TESTFILE + sync resetquota -u $TSTUSR - set_blk_unitsz $((128 * 1024)) set_blk_tunesz $((128 * 1024 / 2)) } @@ -1460,12 +1528,10 @@ test_18a() { log "(dd_pid=$DDPID, time=$count, timeout=$timeout)" lustre_fail mds 0 - rm -f $TESTFILE - sync; sleep 3; sync; + sync resetquota -u $TSTUSR - set_blk_unitsz $((128 * 1024)) set_blk_tunesz $((128 * 1024 / 2)) } @@ -1530,15 +1596,20 @@ test_18bc_sub() { sleep 1 done log "(dd_pid=$DDPID, time=$count, timeout=$timeout)" - sync; sleep 1; sync + sync + cancel_lru_locks mdc + cancel_lru_locks osc testfile_size=$(stat -c %s $TESTFILE) [ $testfile_size -ne $((BLK_SZ * 1024 * 100)) ] && \ quota_error u $TSTUSR "expect $((BLK_SZ * 1024 * 100)), got ${testfile_size}. Verifying file failed!" $SHOW_QUOTA_USER - resetquota -u $TSTUSR - rm -rf $TESTFILE - sync; sleep 1; sync + rm -f $TESTFILE + sync + + resetquota -u $TSTUSR + set_blk_unitsz $((128 * 1024)) + set_blk_tunesz $((128 * 1024 / 2)) } # test when mds does failover, the ost still could work well @@ -1717,18 +1788,11 @@ test_21() { run_test_with_stat 21 "run for fixing bug16053 ===========" test_22() { - local SAVEREFORMAT - - SAVEREFORMAT=$REFORMAT - $LFS quotaoff -ug $DIR || error "could not turn quotas off" - quota_save_version "ug" - REFORMAT="reformat" stopall mount setupall - REFORMAT=$SAVEREFORMAT echo "checking parameters" @@ -1739,21 +1803,6 @@ test_22() { } run_test_with_stat 22 "test if quota_type saved as permanent parameter ====" -# It is triggered when test_23 failed, diagnostic for bug 18293 -test_23_dumppage() -{ - NUM=$1 - DUMPPAGE=`find /proc/fs/${FSNAME}/llite/ -name dump_page_cache` - qtime=`date +%s` - cat $DUMPPAGE > $TMP/sanity-quota_test_23_${qtime}_${NUM}.log - fsize=`stat -c%s $TMP/sanity-quota_test_23_${qtime}_${NUM}.log` - if [ $fsize -eq 0 ]; then - rm -f $TMP/sanity-quota_test_23_${qtime}_${NUM}.log - else - error "some IO error was found during directIO" - fi -} - test_23_sub() { mkdir -p $DIR/$tdir chmod 0777 $DIR/$tdir @@ -1776,15 +1825,15 @@ test_23_sub() { log " Step1: trigger quota with 0_DIRECT" log " Write half of file" $RUNAS $DIRECTIO write $TESTFILE 0 $(($LIMIT/1024/2)) $bs_unit || \ - (quota_error u $TSTUSR "(1) write failure, but expect success: $LIMIT" && test_23_dumppage 1) + quota_error u $TSTUSR "(1) write failure, but expect success: $LIMIT" log " Write out of block quota ..." $RUNAS $DIRECTIO write $TESTFILE $(($LIMIT/1024/2)) $(($LIMIT/1024/2)) $bs_unit && \ - quota_error u $TSTUSR "(2) write success, but expect EDQUOT: $LIMIT" && test_23_dumppage 2 + quota_error u $TSTUSR "(2) write success, but expect EDQUOT: $LIMIT" log " Step1: done" log " Step2: rewrite should succeed" - $RUNAS $DIRECTIO write $TESTFILE $(($LIMIT/1024/2)) 1 $bs_unit || \ - (quota_error u $TSTUSR "(3) write failure, but expect success: $LIMIT" && test_23_dumppage 3) + $RUNAS $DIRECTIO write $TESTFILE 0 1 $bs_unit || \ + quota_error u $TSTUSR "(3) write failure, but expect success: $LIMIT" log " Step2: done" rm -f $TESTFILE @@ -1980,6 +2029,13 @@ test_26() { } run_test_with_stat 26 "test for false quota error(bz18491) ======================================" +test_27() { + $LFS quota $TSTUSR $DIR && error "lfs succeeded with no type, but should have failed" + $LFS setquota $TSTUSR $DIR && error "lfs succeeded with no type, but should have failed" + return 0 +} +run_test_with_stat 27 "lfs quota/setquota should handle wrong arguments (19612) =================" + # turn off quota test_99() {