Whamcloud - gitweb
LU-241 Support crc32c with hardware accelerated instruction as one of lustre checksums
[fs/lustre-release.git] / lustre / tests / sanity.sh
index fa33841..aa53e3c 100644 (file)
@@ -9,10 +9,8 @@
 set -e
 
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 12653 12653 5188 16260 19742
-ALWAYS_EXCEPT="                27u   42a  42b  42c  42d  45   51d   65a   65e   68b  $SANITY_EXCEPT"
-# bug number for skipped test: 2108 9789 3637 9789 3561 5188/5749 1443
-#ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"27m 42a 42b 42c 42d 45 68 76"}
+# bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 5188
+ALWAYS_EXCEPT="                27u   42a  42b  42c  42d  45   51d   68b  $SANITY_EXCEPT"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
 # Tests that fail on uml
@@ -1209,9 +1207,9 @@ test_27u() { # bug 4900
 run_test 27u "skip object creation on OSC w/o objects =========="
 
 test_27v() { # bug 4900
-       [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return
-       remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       remote_ost_nodsh && skip "remote OST with nodsh" && return
+        [ "$OSTCOUNT" -lt "2" ] && skip_env "too few OSTs" && return
+        remote_mds_nodsh && skip "remote MDS with nodsh" && return
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
 
         exhaust_all_precreations 0x215
         reset_enospc
@@ -1230,9 +1228,10 @@ test_27v() { # bug 4900
 
         local FINISH=`date +%s`
         local TIMEOUT=`lctl get_param -n timeout`
-        [ $((FINISH - START)) -ge $((TIMEOUT / 2)) ] && \
+        local PROCESS=$((FINISH - START))
+        [ $PROCESS -ge $((TIMEOUT / 2)) ] && \
                error "$FINISH - $START >= $TIMEOUT / 2"
-
+        sleep $((TIMEOUT / 2 - PROCESS))
         reset_enospc
 }
 run_test 27v "skip object creation on slow OST ================="
@@ -1887,7 +1886,7 @@ test_33c() {
         for ostnum in $(seq $OSTCOUNT); do
                 # test-framework's OST numbering is one-based, while Lustre's
                 # is zero-based
-                ostname=$(printf "lustre-OST%.4d" $((ostnum - 1)))
+                ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1)))
                 # Parsing llobdstat's output sucks; we could grep the /proc
                 # path, but that's likely to not be as portable as using the
                 # llobdstat utility.  So we parse lctl output instead.
@@ -1911,7 +1910,7 @@ test_33c() {
 
         # Total up write_bytes after writing.  We'd better find non-zeros.
         for ostnum in $(seq $OSTCOUNT); do
-                ostname=$(printf "lustre-OST%.4d" $((ostnum - 1)))
+                ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1)))
                 write_bytes=$(do_facet ost$ostnum lctl get_param -n \
                         obdfilter/$ostname/stats |
                         awk '/^write_bytes/ {print $7}' )
@@ -1926,7 +1925,7 @@ test_33c() {
         if $all_zeros
         then
                 for ostnum in $(seq $OSTCOUNT); do
-                        ostname=$(printf "lustre-OST%.4d" $((ostnum - 1)))
+                        ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1)))
                         echo "Check that write_bytes is present in obdfilter/*/stats:"
                         do_facet ost$ostnum lctl get_param -n \
                                 obdfilter/$ostname/stats
@@ -3897,6 +3896,8 @@ swap_used() {
 # test case for lloop driver, basic function
 test_68a() {
        [ "$UID" != 0 ] && skip_env "must run as root" && return
+       llite_lloop_enabled || \
+               { skip_env "llite_lloop module disabled" && return; }
 
        trap cleanup_68 EXIT
 
@@ -4170,13 +4171,12 @@ set_checksums()
        return 0
 }
 
-export ORIG_CSUM_TYPE=""
+export ORIG_CSUM_TYPE="`lctl get_param -n osc/*osc-[^mM]*/checksum_type |
+                        sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`"
 CKSUM_TYPES=${CKSUM_TYPES:-"crc32 adler"}
+[ "$ORIG_CSUM_TYPE" = "crc32c" ] && CKSUM_TYPES="$CKSUM_TYPES crc32c"
 set_checksum_type()
 {
-       [ "$ORIG_CSUM_TYPE" ] || \
-               ORIG_CSUM_TYPE=`lctl get_param -n osc/*osc-[^mM]*/checksum_type |
-                                sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`
        lctl set_param -n osc.*osc-[^mM]*.checksum_type $1
        log "set checksum type to $1"
        return 0
@@ -5089,7 +5089,7 @@ test_104a() {
        OSC=`lctl get_param -n devices | awk '/-osc-/ {print $4}' | head -n 1`
        lctl --device %$OSC deactivate
        lfs df || error "lfs df with deactivated OSC failed"
-       lctl --device %$OSC recover
+       lctl --device %$OSC activate
        lfs df || error "lfs df with reactivated OSC failed"
        rm -f $DIR/$tfile
 }
@@ -6258,7 +6258,7 @@ test_126() { # bug 12829/13455
 }
 run_test 126 "check that the fsgid provided by the client is taken into account"
 
-test_127() { # bug 15521
+test_127a() { # bug 15521
         $SETSTRIPE -i 0 -c 1 $DIR/$tfile || error "setstripe failed"
         $LCTL set_param osc.*.stats=0
         FSIZE=$((2048 * 1024))
@@ -6294,7 +6294,47 @@ test_127() { # bug 15521
         [ "$read_bytes" != 0 ] || error "no read done"
         [ "$write_bytes" != 0 ] || error "no write done"
 }
-run_test 127 "verify the client stats are sane"
+run_test 127a "verify the client stats are sane"
+
+test_127b() { # bug LU-333
+        $LCTL set_param llite.*.stats=0
+        FSIZE=65536 # sized fixed to match PAGE_SIZE for most clients
+        # perform 2 reads and writes so MAX is different from SUM.
+        dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+        dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+        cancel_lru_locks osc
+        dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
+        dd if=$DIR/$tfile of=/dev/null bs=$FSIZE count=1
+
+        $LCTL get_param llite.*.stats | grep samples > $TMP/${tfile}.tmp
+        while read NAME COUNT SAMP UNIT MIN MAX SUM SUMSQ; do
+                echo "got $COUNT $NAME"
+                eval $NAME=$COUNT || error "Wrong proc format"
+
+        case $NAME in
+                read_bytes)
+                        [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
+                        [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
+                        [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
+                        [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
+                        ;;
+                write_bytes)
+                        [ $COUNT -ne 2 ] && error "count is not 2: $COUNT"
+                        [ $MIN -ne $FSIZE ] && error "min is not $FSIZE: $MIN"
+                        [ $MAX -ne $FSIZE ] && error "max is incorrect: $MAX"
+                        [ $SUM -ne $((FSIZE * 2)) ] && error "sum is wrong: $SUM"
+                        ;;
+                        *) ;;
+                esac
+        done < $TMP/${tfile}.tmp
+
+        #check that we actually got some stats
+        [ "$read_bytes" ] || error "Missing read_bytes stats"
+        [ "$write_bytes" ] || error "Missing write_bytes stats"
+        [ "$read_bytes" != 0 ] || error "no read done"
+        [ "$write_bytes" != 0 ] || error "no write done"
+}
+run_test 127b "verify the llite client stats are sane"
 
 test_128() { # bug 15212
        touch $DIR/$tfile
@@ -8191,6 +8231,54 @@ test_219() {
 }
 run_test 219 "LU-394: Write partial won't cause uncontiguous pages vec at LND"
 
+test_220() { #LU-325
+       local OSTIDX=0
+
+       mkdir -p $DIR/$tdir
+       local OST=$(lfs osts | grep ${OSTIDX}": " | \
+               awk '{print $2}' | sed -e 's/_UUID$//')
+
+        # on the mdt's osc
+       local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $OST)
+       local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
+                       osc.$mdtosc_proc1.prealloc_last_id)
+       local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
+                       osc.$mdtosc_proc1.prealloc_next_id)
+
+       $LFS df -i
+
+       do_facet mgs $LCTL pool_new $FSNAME.$TESTNAME || return 1
+       do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $OST || return 2
+
+       $SETSTRIPE $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
+
+       echo "preallocated objects in MDS is $((last_id - next_id))" \
+             "($last_id - $next_id)"
+
+       count=$($LFS df -i $MOUNT | grep ^$OST | awk '{print $4}')
+       echo "OST still has $count objects"
+
+       free=$((count + last_id - next_id))
+       echo "create $((free - next_id)) files @next_id..."
+       createmany -o $DIR/$tdir/f $next_id $free || return 3
+
+       local last_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
+                       osc.$mdtosc_proc1.prealloc_last_id)
+       local next_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
+                       osc.$mdtosc_proc1.prealloc_next_id)
+
+       echo "after creation, last_id=$last_id2, next_id=$next_id2"
+       $LFS df -i
+
+       echo "cleanup..."
+
+       do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $OST || return 4
+       do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME || return 5
+       echo "unlink $((free - next_id)) files @ $next_id..."
+       unlinkmany $DIR/$tdir/f $next_id $free || return 3
+}
+run_test 220 "the preallocated objects in MDS still can be used if ENOSPC is returned by OST with enough disk space"
+
 #
 # tests that do cleanup/setup should be run at the end
 #