X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=6ef903ceda9eb5e6b8189b5aaa535ebc93f2cdeb;hp=f94a30157f83860b79f338ceeb37450ebd11ccd0;hb=742597c1aa7f4f0a021866fedf446d174f53e500;hpb=8f4598bddfb166c27c9ea36ac32061168fe38181 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index f94a301..6ef903c 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -13,7 +13,7 @@ ALWAYS_EXCEPT=" 27o 27q 42a 42b 42c 42d 45 74b 75 $SANI #ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"27m 42a 42b 42c 42d 45 68 76"} # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! -[ "$SLOW" = "no" ] && EXCEPT="$EXCEPT 24o 27m 36f 36g 51b 51c 63 64b 68 71 73 101 115" +[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 36f 36g 51b 51c 60c 63 64b 68 71 73 78 101 103 115 120g" # Tests that fail on uml CPU=`awk '/model/ {print $4}' /proc/cpuinfo` @@ -143,6 +143,8 @@ MAXFREE=${MAXFREE:-$((200000 * $OSTCOUNT))} [ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo rm -rf $DIR/[Rdfs][1-9]* +check_runas_id $RUNAS_ID $RUNAS + build_test_filter if [ "${ONLY}" = "MOUNT" ] ; then @@ -528,7 +530,6 @@ run_test 21 "write to dangling link ============================" test_22() { WDIR=$DIR/$tdir - mkdir $WDIR chown $RUNAS_ID $WDIR (cd $WDIR || error "cd $WDIR failed"; $RUNAS tar cf - /etc/hosts /etc/sysconfig/network | \ @@ -796,15 +797,15 @@ run_test 26e "unlink multiple component recursive symlink ======" # recursive symlinks (bug 7022) test_26f() { - mkdir $DIR/$tfile || error "mkdir $DIR/$tfile failed" - cd $DIR/$tfile || error "cd $DIR/$tfile failed" - mkdir -p $tdir/bar1 || error "mkdir $tdir/bar1 failed" + mkdir $DIR/$tdir/$tfile || error "mkdir $DIR/$tdir/$tfile failed" + cd $DIR/$tdir/$tfile || error "cd $DIR/$tdir/$tfile failed" + mkdir -p lndir/bar1 || error "mkdir lndir/bar1 failed" mkdir $tfile || error "mkdir $tfile failed" cd $tfile || error "cd $tfile failed" ln -s .. dotdot || error "ln dotdot failed" - ln -s dotdot/$tdir $tdir || error "ln $tdir failed" - cd ../.. || error "cd ../.. failed" - output=`ls $tfile/$tfile/$tdir/bar1` + ln -s dotdot/lndir lndir || error "ln lndir failed" + cd $DIR/$tdir || error "cd $DIR/$tdir failed" + output=`ls $tfile/$tfile/lndir/bar1` [ "$output" = bar1 ] && error "unexpected output" rm -r $tfile || error "rm $tfile failed" $CHECKSTAT -a $DIR/$tfile || error "$tfile not gone" @@ -1887,11 +1888,14 @@ test_42d() { run_test 42d "test complete truncate of file with cached dirty data" test_43() { - mkdir $DIR/$tdir cp -p /bin/ls $DIR/$tdir/$tfile - exec 9>> $DIR/$tdir/$tfile + multiop $DIR/$tdir/$tfile Ow_c & + pid=$! + # give multiop a chance to open + sleep 1 + $DIR/$tdir/$tfile && error || true - exec 9<&- + kill -USR1 $pid } run_test 43 "execution of file opened for write should return -ETXTBSY" @@ -2444,6 +2448,25 @@ setup_56() { fi } +setup_56_special() { + LOCAL_NUMFILES=$1 + LOCAL_NUMDIRS=$2 + TDIR=$DIR/${tdir}g + setup_56 $1 $2 + if [ ! -e "$TDIR/loop1b" ] ; then + for i in `seq 1 $LOCAL_NUMFILES` ; do + mknod $TDIR/loop${i}b b 7 $i + mknod $TDIR/null${i}c c 1 3 + ln -s $TDIR/file1 $TDIR/link${i}l + done + for i in `seq 1 $LOCAL_NUMDIRS` ; do + mknod $TDIR/dir$i/loop${i}b b 7 $i + mknod $TDIR/dir$i/null${i}c c 1 3 + ln -s $TDIR/dir$i/file1 $TDIR/dir$i/link${i}l + done + fi +} + test_56g() { $LSTRIPE -d $DIR @@ -2485,6 +2508,73 @@ test_56i() { } run_test 56i "check 'lfs find -ost UUID' skips directories =======" +test_56j() { + setup_56_special $NUMFILES $NUMDIRS + + EXPECTED=$((NUMDIRS+1)) + NUMS=`$LFIND -type d $DIR/${tdir}g | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -type d $DIR/${tdir}g wrong: found $NUMS, expected $EXPECTED" +} +run_test 56j "check lfs find -type d =============================" + +test_56k() { + setup_56_special $NUMFILES $NUMDIRS + + EXPECTED=$(((NUMDIRS+1) * NUMFILES)) + NUMS=`$LFIND -type f $DIR/${tdir}g | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -type f $DIR/${tdir}g wrong: found $NUMS, expected $EXPECTED" +} +run_test 56k "check lfs find -type f =============================" + +test_56l() { + setup_56_special $NUMFILES $NUMDIRS + + EXPECTED=$((NUMDIRS + NUMFILES)) + NUMS=`$LFIND -type b $DIR/${tdir}g | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -type b $DIR/${tdir}g wrong: found $NUMS, expected $EXPECTED" +} +run_test 56l "check lfs find -type b =============================" + +test_56m() { + setup_56_special $NUMFILES $NUMDIRS + + EXPECTED=$((NUMDIRS + NUMFILES)) + NUMS=`$LFIND -type c $DIR/${tdir}g | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -type c $DIR/${tdir}g wrong: found $NUMS, expected $EXPECTED" +} +run_test 56m "check lfs find -type c =============================" + +test_56n() { + setup_56_special $NUMFILES $NUMDIRS + + EXPECTED=$((NUMDIRS + NUMFILES)) + NUMS=`$LFIND -type l $DIR/${tdir}g | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -type l $DIR/${tdir}g wrong: found $NUMS, expected $EXPECTED" +} +run_test 56n "check lfs find -type l =============================" + +test_56o() { + setup_56 $NUMFILES $NUMDIRS + TDIR=$DIR/${tdir}g + + utime $TDIR/file1 > /dev/null || error + utime $TDIR/file2 > /dev/null || error + utime $TDIR/dir1 > /dev/null || error + utime $TDIR/dir2 > /dev/null || error + utime $TDIR/dir1/file1 > /dev/null || error + + EXPECTED=5 + NUMS=`$LFIND -mtime +1 $TDIR | wc -l` + [ $NUMS -eq $EXPECTED ] || \ + error "lfs find -mtime $TDIR wrong: found $NUMS, expected $EXPECTED" +} +run_test 56o "check lfs find -mtime for old files ==========================" + test_57a() { # note test will not do anything if MDS is not local remote_mds && skip "remote MDS" && return @@ -2828,6 +2918,9 @@ test_68() { grep -q llite_lloop /proc/modules [ $? -ne 0 ] && skip "can't find module llite_lloop" && return + [ -z "`$LCTL list_nids | grep -v tcp`" ] && \ + skip "can't reliably test swap with TCP" && return + MEMTOTAL=`meminfo MemTotal` NR_BLOCKS=$((MEMTOTAL>>8)) [[ $NR_BLOCKS -le 2048 ]] && NR_BLOCKS=2048 @@ -3141,8 +3234,8 @@ run_test 76 "destroy duplicate inodes in client inode cache ====" export ORIG_CSUM="" set_checksums() { - [ "$ORIG_CSUM" ]||ORIG_CSUM=`cat $LPROC/llite/*/checksum_pages|head -n1` - for f in $LPROC/llite/*/checksum_pages; do + [ "$ORIG_CSUM" ] || ORIG_CSUM=`cat $LPROC/osc/*/checksums | head -n1` + for f in $LPROC/osc/*/checksums; do echo $1 >> $f done @@ -3476,7 +3569,7 @@ setup_test102() { done done - cd .. + cd $DIR star -c f=$TMP/f102.tar $tdir SETUP_TEST102=yes } @@ -3819,7 +3912,6 @@ test_105c() { run_test 105c "lockf when mounted without -o flock test ========" test_106() { #bug 10921 - mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed" $DIR/$tdir && error "exec $DIR/$tdir succeeded" chmod 777 $DIR/$tdir || error "chmod $DIR/$tdir failed" } @@ -3891,8 +3983,9 @@ test_115() { run_test 115 "verify dynamic thread creation====================" free_min_max () { - AVAIL=($(cat $LPROC/osc/*[oO][sS][cC]-[^M]*/kbytesavail)) - echo OST kbytes available: ${AVAIL[@]} + wait_delete_completed + AVAIL=($(cat $LPROC/osc/*[oO][sS][cC]-[^M]*/kbytesavail)) + echo OST kbytes available: ${AVAIL[@]} MAXI=0; MAXV=${AVAIL[0]} MINI=0; MINV=${AVAIL[0]} for ((i = 0; i < ${#AVAIL[@]}; i++)); do @@ -4424,7 +4517,6 @@ test_120a() { [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \ skip "no early lock cancel on server" && return 0 lru_resize_disable - mkdir $DIR/$tdir cancel_lru_locks mdc stat $DIR/$tdir > /dev/null can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats` @@ -4442,7 +4534,6 @@ test_120b() { [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \ skip "no early lock cancel on server" && return 0 lru_resize_disable - mkdir $DIR/$tdir cancel_lru_locks mdc stat $DIR/$tdir > /dev/null can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats` @@ -4497,7 +4588,6 @@ test_120e() { [ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \ skip "no early lock cancel on server" && return 0 lru_resize_disable - mkdir $DIR/$tdir dd if=/dev/zero of=$DIR/$tdir/f1 count=1 cancel_lru_locks mdc cancel_lru_locks osc @@ -4582,12 +4672,21 @@ test_121() { #bug #10589 } run_test 121 "read cancel race =========" +cmd_cancel_lru_locks() { + NS=$1 + test "x$NS" = "x" && NS="mdc" + for d in `find $LPROC/ldlm/namespaces | grep $NS`; do + if test -f $d/lru_size; then + cancel_lru_locks $d + fi + done +} + test_124a() { [ -z "`grep lru_resize $LPROC/mdc/*/connect_flags`" ] && \ skip "no lru resize on server" && return 0 - cancel_lru_locks mdc + cmd_cancel_lru_locks "mdc" lru_resize_enable - NSDIR=`find $LPROC/ldlm/namespaces | grep mdc | head -1` # we want to test main pool functionality, that is cancel based on SLV # this is why shrinkers are disabled @@ -4597,20 +4696,33 @@ test_124a() { NR=2000 mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir" - LRU_SIZE=`cat $NSDIR/lru_size` - # use touch to produce $NR new locks log "create $NR files at $DIR/$tdir" for ((i=0;i<$NR;i++)); do touch $DIR/$tdir/f$i; done + + NSDIR="" + LRU_SIZE=0 + for d in `find $LPROC/ldlm/namespaces | grep mdc-`; do + if test -f $d/lru_size; then + LRU_SIZE=`cat $d/lru_size` + if test $LRU_SIZE -gt 0; then + log "using $d namespace" + NSDIR=$d + break + fi + fi + done - LRU_SIZE_B=`cat $NSDIR/lru_size` - if test $LRU_SIZE -ge $LRU_SIZE_B; then + if test -z $NSDIR; then skip "No cached locks created!" - cat $NSDIR/pool/state return 0 fi - LRU_SIZE_B=$((LRU_SIZE_B-LRU_SIZE)) - log "created $LRU_SIZE_B lock(s)" + + if test $LRU_SIZE -lt 100; then + skip "Not enough cached locks created!" + return 0 + fi + log "created $LRU_SIZE lock(s)" # we want to sleep 30s to not make test too long SLEEP=30 @@ -4628,6 +4740,7 @@ test_124a() { # Use $LRU_SIZE_B here to take into account real number of locks created # in the case of CMD, LRU_SIZE_B != $NR in most of cases LVF=$(($MAX_HRS * 60 * 60 * $LIMIT / $SLEEP)) + LRU_SIZE_B=$LRU_SIZE log "make client drop locks $LVF times faster so that ${SLEEP}s is enough to cancel $LRU_SIZE_B lock(s)" OLD_LVF=`cat $NSDIR/pool/lock_volume_factor` echo "$LVF" > $NSDIR/pool/lock_volume_factor @@ -4650,39 +4763,82 @@ test_124a() { } run_test 124a "lru resize =======================================" +set_lru_size() { + NS=$1 + SIZE=$2 + test "x$NS" = "x" && NS="mdc" + test "x$SIZE" = "x" && SIZE="0" + test $SIZE -lt 0 && SIZE="0" + test $SIZE -gt 0 && ACTION="disabled" || ACTION="enabled" + for d in `find $LPROC/ldlm/namespaces | grep $NS`; do + if test -f $d/lru_size; then + log "$(basename $d):" + log " lru resize $ACTION" + log " lru_size=$SIZE" + echo $SIZE > $d/lru_size + fi + done +} + +get_lru_size() { + NS=$1 + test "x$NS" = "x" && NS="mdc" + for d in `find $LPROC/ldlm/namespaces | grep $NS`; do + if test -f $d/lru_size; then + log "$(basename $d):" + log " lru_size=$(cat $d/lru_size)" + fi + done +} + test_124b() { [ -z "`grep lru_resize $LPROC/mdc/*/connect_flags`" ] && \ skip "no lru resize on server" && return 0 - cleanup -f || error "failed to unmount" - MOUNTOPT="$MOUNTOPT,nolruresize" - setup - NR=3000 - mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir" + NSDIR=`find $LPROC/ldlm/namespaces | grep mdc | head -1` + LIMIT=`cat $NSDIR/pool/limit` + + NR_CPU=$(awk '/processor/' /proc/cpuinfo | wc -l) + # 100 locks here is default value for non-shrinkable lru as well + # as the order to switch to static lru managing policy + # define LDLM_DEFAULT_LRU_SIZE (100 * num_online_cpus()) + LDLM_DEFAULT_LRU_SIZE=$((100 * NR_CPU)) - createmany -o $DIR/$tdir/f $NR - log "doing ls -la $DIR/$tdir 3 times (lru resize disabled)" + NR=$((LIMIT-(LIMIT/3))) + log "starting lru resize disable cycle" + set_lru_size "mdc-" $LDLM_DEFAULT_LRU_SIZE + + mkdir -p $DIR/$tdir/disable_lru_resize || + error "failed to create $DIR/$tdir/disable_lru_resize" + + createmany -o $DIR/$tdir/disable_lru_resize/f $NR + log "doing ls -la $DIR/$tdir/disable_lru_resize 3 times" stime=`date +%s` - ls -la $DIR/$tdir > /dev/null - ls -la $DIR/$tdir > /dev/null - ls -la $DIR/$tdir > /dev/null + ls -la $DIR/$tdir/disable_lru_resize > /dev/null + ls -la $DIR/$tdir/disable_lru_resize > /dev/null + ls -la $DIR/$tdir/disable_lru_resize > /dev/null etime=`date +%s` nolruresize_delta=$((etime-stime)) log "ls -la time: $nolruresize_delta seconds" + get_lru_size "mdc-" + + log "starting lru resize enable cycle" + mkdir -p $DIR/$tdir/enable_lru_resize || + error "failed to create $DIR/$tdir/enable_lru_resize" - cleanup -f || error "failed to unmount" - MOUNTOPT=`echo $MOUNTOPT | sed "s/nolruresize/lruresize/"` - setup + # 0 locks means here flush lru and switch to lru resize policy + set_lru_size "mdc-" 0 - createmany -o $DIR/$tdir/f $NR - log "doing ls -la $DIR/$tdir 3 times (lru resize enabled)" + createmany -o $DIR/$tdir/enable_lru_resize/f $NR + log "doing ls -la $DIR/$tdir/enable_lru_resize 3 times" stime=`date +%s` - ls -la $DIR/$tdir > /dev/null - ls -la $DIR/$tdir > /dev/null - ls -la $DIR/$tdir > /dev/null + ls -la $DIR/$tdir/enable_lru_resize > /dev/null + ls -la $DIR/$tdir/enable_lru_resize > /dev/null + ls -la $DIR/$tdir/enable_lru_resize > /dev/null etime=`date +%s` lruresize_delta=$((etime-stime)) log "ls -la time: $lruresize_delta seconds" + get_lru_size "mdc-" if test $lruresize_delta -gt $nolruresize_delta; then log "ls -la is $((lruresize_delta - $nolruresize_delta))s slower with lru resize enabled" @@ -4691,8 +4847,6 @@ test_124b() { else log "lru resize performs the same with no lru resize" fi - - unlinkmany $DIR/$tdir/f $NR } run_test 124b "lru resize (performance test) =======================" @@ -4705,6 +4859,15 @@ test_125() { # 13358 } run_test 125 "don't return EPROTO when a dir has a non-default striping and ACLs" +test_126() { # bug 12829/13455 + [ "$UID" != 0 ] && echo "skipping $TESTNAME (must run as root)" && return + $RUNAS -u 0 -g 1 touch $DIR/$tfile || error "touch failed" + gid=`ls -n $DIR/$tfile | awk '{print $4}'` + rm -f $DIR/$tfile + [ $gid -eq "1" ] || error "gid is set to" $gid "instead of 1" +} +run_test 126 "check that the fsgid provided by the client is taken into account" + TMPDIR=$OLDTMPDIR TMP=$OLDTMP HOME=$OLDHOME