X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Foos.sh;h=b34727ee81730a48abe231f7f3b1cc466210fc1c;hp=8519dad6769d5c67695385b0ab352cf0b059e643;hb=82dff34569766e08218c395c04f428530ff7726e;hpb=15b0e514725b0c8e0acdbfc0d5382a6302639d58 diff --git a/lustre/tests/oos.sh b/lustre/tests/oos.sh index 8519dad..b34727e 100755 --- a/lustre/tests/oos.sh +++ b/lustre/tests/oos.sh @@ -1,46 +1,110 @@ #!/bin/bash -export NAME=${NAME:-local} -export OSTSIZE=10000 +set -e +#set -vx +LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)} +. $LUSTRE/tests/test-framework.sh + +export PATH=`dirname $0`/../utils:$PATH +LFS=${LFS:-lfs} +LCTL=${LCTL:-lctl} +MOUNT=${MOUNT:-$1} MOUNT=${MOUNT:-/mnt/lustre} +OOS=$MOUNT/oosfile TMP=${TMP:-/tmp} - -echo "mnt.." -sh llmount.sh -echo "done" +LOG=$TMP/$(basename $0 .sh).log SUCCESS=1 -FREESPACE=`df |grep $MOUNT|tr -s ' '|cut -d ' ' -f4` +rm -f $OOS $LOG + +sync; sleep 1; sync # to ensure we get up-to-date statfs info + +#$LCTL set_param -n debug=-1 +#$LCTL set_param -n subsystem_debug=0x40a8 -rm -f $TMP/oosfile -dd if=/dev/zero of=$MOUNT/oosfile count=$[$FREESPACE + 1] bs=1k 2>$TMP/oosfile +#$LCTL clear +#$LCTL debug_daemon start /r/tmp/debug 1024 -RECORDSOUT=`grep "records out" $TMP/oosfile|cut -d + -f1` +STRIPECOUNT=`$LCTL get_param -n lov.*.activeobd | head -n 1` +ORIGFREE=`$LCTL get_param -n llite.*.kbytesavail | head -n 1` +MAXFREE=${MAXFREE:-$((400000 * $STRIPECOUNT))} +echo STRIPECOUNT=$STRIPECOUNT ORIGFREE=$ORIGFREE MAXFREE=$MAXFREE +if [ $ORIGFREE -gt $MAXFREE ]; then + skip "$0: ${ORIGFREE}kB free gt MAXFREE ${MAXFREE}kB, increase $MAXFREE (or reduce test fs size) to proceed" + exit 0 +fi -[ -z "`grep "No space left on device" $TMP/oosfile`" ] && \ - echo "failed:dd not return ENOSPC" && SUCCESS=0 +export LANG=C LC_LANG=C # for "No space left on device" message + +[ -f $LOG ] && error "log file wasn't removed?" + +echo BEFORE dd started +for OSC in `$LCTL get_param -N osc.*-osc-*.kbytesavail | cut -d"." -f1-2`; do + AVAIL=`$LCTL get_param -n $OSC.kbytesavail` + GRANT=$((`$LCTL get_param -n $OSC.cur_grant_bytes` / 1024)) + echo -n "$(echo $OSC | cut -d"." -f2) avl=$AVAIL grnt=$GRANT diff=$(($AVAIL - $GRANT))" + echo " " +done + +# make sure we stripe over all OSTs to avoid OOS on only a subset of OSTs +$LFS setstripe $OOS -c $STRIPECOUNT +if dd if=/dev/zero of=$OOS count=$(($ORIGFREE + 100)) bs=1k 2> $LOG; then + echo "ERROR: dd did not fail" + SUCCESS=0 +fi -REMAINEDFREE=`df |grep $MOUNT|tr -s ' '|cut -d ' ' -f4` -[ $[$FREESPACE - $REMAINEDFREE ] -lt $RECORDSOUT ] && \ - echo "failed:the space written by dd not equal to available space" && \ - SUCCESS=0 && echo "$FREESPACE - $REMAINEDFREE $RECORDSOUT" +[ ! -s "$LOG" ] && error "LOG file is empty!" -[ $REMAINEDFREE -gt 100 ] && \ - echo "failed:too many space left $REMAINEDFREE and -ENOSPC returned" &&\ +if [ "`grep -c 'No space left on device' $LOG`" -ne 1 ]; then + echo "ERROR: dd not return ENOSPC" + sed "s/^/LOG: /" $LOG + SUCCESS=0 +fi + +# flush cache to OST(s) so avail numbers are correct +sync; sleep 1 ; sync + +echo AFTER dd +for OSC in `$LCTL get_param -N osc.*-osc-*.kbytesavail | cut -d"." -f1-2`; do + AVAIL=`$LCTL get_param -n $OSC.kbytesavail` + GRANT=$((`$LCTL get_param -n $OSC.cur_grant_bytes` / 1024)) + echo -n "$(echo $OSC | cut -d"." -f2) avl=$AVAIL grnt=$GRANT diff=$(($AVAIL - $GRANT))" + [ $(($AVAIL - $GRANT)) -lt 400 ] && OSCFULL=full && echo -n " FULL" + echo " " +done + +if [ -z "$OSCFULL" ]; then + echo "no OSTs are close to full" + $LCTL get_param "osc.*-osc-*.kbytesavail" + $LCTL get_param "osc.*-osc-*.cur*" + SUCCESS=0 +fi + +RECORDSOUT=`grep "records out" $LOG | cut -d + -f1` +FILESIZE=`ls -l $OOS | awk '{ print $5 }'` +if [ -z "$RECORDSOUT" ]; then + echo "ERROR: no blocks written by dd?" + sed "s/^/LOG: /" $LOG + SUCCESS=0 +elif [ "$RECORDSOUT" -ne $((FILESIZE / 1024)) ]; then + echo "ERROR: blocks written by dd not equal to the size of file" SUCCESS=0 +fi -FILESIZE=`ls -l $MOUNT/oosfile|tr -s ' '|cut -d ' ' -f5` -[ $RECORDSOUT -ne $[$FILESIZE/1024] ] && \ - echo "failed:the space written by dd not equal to the size of file" && \ - SUCCESS=0 +#$LCTL debug_daemon stop -[ $SUCCESS -eq 1 ] && echo "Success!" +echo LOG file +cat $LOG +rm -f $OOS +sync; sleep 1; sync -rm -f $MOUNT/oosfile* -rm -f $TMP/oosfile +sync; sleep 3; sync -echo "" -echo "cln.." -sh llmountcleanup.sh +if [ $SUCCESS -eq 1 ]; then + echo "Success!" + rm -f $LOG +else + exit 1 +fi