Whamcloud - gitweb
LU-8726 osd-ldiskfs: bypass read for benchmarking
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 00e0064..b389e68 100755 (executable)
@@ -2426,10 +2426,10 @@ run_test 31p "remove of open striped directory"
 cleanup_test32_mount() {
        local rc=0
        trap 0
-       local loopdev=$(losetup -a | grep $EXT2_DEV | sed -ne 's/:.*$/p')
+       local loopdev=$(losetup -a | grep $EXT2_DEV | sed -ne 's/:.*$//p')
        $UMOUNT $DIR/$tdir/ext2-mountpoint || rc=$?
        losetup -d $loopdev || true
-       rm -rf $DIR/$tdir/ext2-mountpoint
+       rm -rf $DIR/$tdir
        return $rc
 }
 
@@ -2613,59 +2613,49 @@ test_32o() {
 run_test 32o "stat d32o/symlink->tmp/symlink->lustre-root/$tfile"
 
 test_32p() {
-    log 32p_1
+       log 32p_1
        rm -fr $DIR/d32p
-    log 32p_2
+       log 32p_2
        rm -f $DIR/$tfile
-    log 32p_3
+       log 32p_3
        touch $DIR/$tfile
-    log 32p_4
+       log 32p_4
        test_mkdir -p $DIR/d32p/tmp
-    log 32p_5
+       log 32p_5
        TMP_DIR=$DIR/d32p/tmp
-    log 32p_6
+       log 32p_6
        ln -s $DIR/$tfile $TMP_DIR/symlink12
-    log 32p_7
+       log 32p_7
        ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02
-    log 32p_8
+       log 32p_8
        cat $DIR/d32p/tmp/symlink12 || error
-    log 32p_9
+       log 32p_9
        cat $DIR/d32p/symlink02 || error
-    log 32p_10
+       log 32p_10
 }
 run_test 32p "open d32p/symlink->tmp/symlink->lustre-root/$tfile"
 
-cleanup_testdir_mount() {
-       local rc=0
-       trap 0
-       local loopdev=$(losetup -a | grep $EXT2_DEV | sed -ne 's/:.*$/p')
-       $UMOUNT $DIR/$tdir || rc=$?
-       losetup -d $loopdev || true
-       rm -rf $DIR/$tdir
-       return $rc
-}
-
 test_32q() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
-       trap cleanup_testdir_mount EXIT
-       test_mkdir -p $DIR/$tdir
-        touch $DIR/$tdir/under_the_mount
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir
-       ls $DIR/$tdir | grep "\<under_the_mount\>" && error
-       cleanup_testdir_mount
+       trap cleanup_test32_mount EXIT
+       test_mkdir -p $DIR/$tdir/ext2-mountpoint
+       touch $DIR/$tdir/ext2-mountpoint/under_the_mount
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint
+       ls $DIR/$tdir/ext2-mountpoint | grep "\<under_the_mount\>" && error
+       cleanup_test32_mount
 }
 run_test 32q "stat follows mountpoints in Lustre (should return error)"
 
 test_32r() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ -e $DIR/$tdir ] && rm -fr $DIR/$tdir
-       trap cleanup_testdir_mount EXIT
-       test_mkdir -p $DIR/$tdir
-        touch $DIR/$tdir/under_the_mount
-       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir
-       ls $DIR/$tdir | grep -q under_the_mount && error || true
-       cleanup_testdir_mount
+       trap cleanup_test32_mount EXIT
+       test_mkdir -p $DIR/$tdir/ext2-mountpoint
+       touch $DIR/$tdir/ext2-mountpoint/under_the_mount
+       mount -t ext2 -o loop $EXT2_DEV $DIR/$tdir/ext2-mountpoint
+       ls $DIR/$tdir/ext2-mountpoint | grep -q under_the_mount && error || true
+       cleanup_test32_mount
 }
 run_test 32r "opendir follows mountpoints in Lustre (should return error)"
 
@@ -10955,6 +10945,36 @@ test_160d() {
 }
 run_test 160d "verify that changelog log catch the migrate event"
 
+test_160e() {
+       # Create a user
+       CL_USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+               changelog_register -n)
+       echo "Registered as changelog user $CL_USER"
+       trap cleanup_changelog EXIT
+
+       # Delete a future user (expect fail)
+       do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister cl77
+       local rc=$?
+
+       if [ $rc -eq 0 ]; then
+               error "Deleted non-existant user cl77"
+       elif [ $rc -ne 2 ]; then
+               error "changelog_deregister failed with $rc, " \
+                       "expected 2 (ENOENT)"
+       fi
+
+       # Clear to a bad index (1 billion should be safe)
+       $LFS changelog_clear $MDT0 $CL_USER 1000000000
+       rc=$?
+
+       if [ $rc -eq 0 ]; then
+               error "Successfully cleared to invalid CL index"
+       elif [ $rc -ne 22 ]; then
+               error "changelog_clear failed with $rc, expected 22 (EINVAL)"
+       fi
+}
+run_test 160e "changelog negative testing"
+
 test_161a() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        test_mkdir -p -c1 $DIR/$tdir
@@ -14082,8 +14102,8 @@ test_253() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        remote_mgs_nodsh && skip "remote MGS with nodsh" && return
 
-       local ost_name=$($LFS osts | grep ${ostidx}": " | \
-               awk '{print $2}' | sed -e 's/_UUID$//')
+       local ost_name=$($LFS osts |
+               sed -n 's/^'$ostidx': \(.*\)_UUID .*/\1/p')
        # on the mdt's osc
        local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $ost_name)
        do_facet $SINGLEMDS $LCTL get_param -n \
@@ -15316,12 +15336,14 @@ test_311() {
        local new_iused
        for i in $(seq 120); do
                new_iused=$($LFS df -i | grep OST0000 | awk '{ print $3 }')
-               [ $((old_iused - new_iused)) -gt 800 ] && break
+               # system may be too busy to destroy all objs in time, use
+               # a somewhat small value to not fail autotest
+               [ $((old_iused - new_iused)) -gt 400 ] && break
                sleep 1
        done
 
        echo "waited $i sec, old Iused $old_iused, new Iused $new_iused"
-       [ $((old_iused - new_iused)) -gt 800 ] ||
+       [ $((old_iused - new_iused)) -gt 400 ] ||
                error "objs not destroyed after unlink"
 }
 run_test 311 "disable OSP precreate, and unlink should destroy objs"
@@ -15438,7 +15460,16 @@ test_313() {
 }
 run_test 313 "io should fail after last_rcvd update fail"
 
-test_399() { # LU-7655 for OST fake write
+test_fake_rw() {
+       local read_write=$1
+       if [ "$read_write" = "write" ]; then
+               local dd_cmd="dd if=/dev/zero of=$DIR/$tfile"
+       elif [ "$read_write" = "read" ]; then
+               local dd_cmd="dd of=/dev/null if=$DIR/$tfile"
+       else
+               error "argument error"
+       fi
+
        # turn off debug for performance testing
        local saved_debug=$($LCTL get_param -n debug)
        $LCTL set_param debug=0
@@ -15450,35 +15481,56 @@ test_399() { # LU-7655 for OST fake write
        local blocks=$((ost1_avail_size/2/1024)) # half avail space by megabytes
        [ $blocks -gt 1000 ] && blocks=1000 # 1G in maximum
 
+       if [ "$read_write" = "read" ]; then
+               truncate -s $(expr 1048576 \* $blocks) $DIR/$tfile
+       fi
+
        local start_time=$(date +%s.%N)
-       dd if=/dev/zero of=$DIR/$tfile bs=1M count=$blocks oflag=sync ||
-               error "real dd writing error"
+       $dd_cmd bs=1M count=$blocks oflag=sync ||
+               error "real dd $read_write error"
        local duration=$(bc <<< "$(date +%s.%N) - $start_time")
-       rm -f $DIR/$tfile
 
-       # define OBD_FAIL_OST_FAKE_WRITE        0x238
+       if [ "$read_write" = "write" ]; then
+               rm -f $DIR/$tfile
+       fi
+
+       # define OBD_FAIL_OST_FAKE_RW           0x238
        do_facet ost1 $LCTL set_param fail_loc=0x238
 
        local start_time=$(date +%s.%N)
-       dd if=/dev/zero of=$DIR/$tfile bs=1M count=$blocks oflag=sync ||
-               error "fake dd writing error"
+       $dd_cmd bs=1M count=$blocks oflag=sync ||
+               error "fake dd $read_write error"
        local duration_fake=$(bc <<< "$(date +%s.%N) - $start_time")
 
-       # verify file size
-       cancel_lru_locks osc
-       $CHECKSTAT -t file -s $((blocks * 1024 * 1024)) $DIR/$tfile ||
-               error "$tfile size not $blocks MB"
-
+       if [ "$read_write" = "write" ]; then
+               # verify file size
+               cancel_lru_locks osc
+               $CHECKSTAT -t file -s $((blocks * 1024 * 1024)) $DIR/$tfile ||
+                       error "$tfile size not $blocks MB"
+       fi
        do_facet ost1 $LCTL set_param fail_loc=0
 
-       echo "fake write $duration_fake vs. normal write $duration in seconds"
+       echo "fake $read_write $duration_fake vs. normal $read_write" \
+               "$duration in seconds"
        [ $(bc <<< "$duration_fake < $duration") -eq 1 ] ||
                error_not_in_vm "fake write is slower"
 
        $LCTL set_param -n debug="$saved_debug"
        rm -f $DIR/$tfile
 }
-run_test 399 "fake write should not be slower than normal write"
+test_399a() { # LU-7655 for OST fake write
+       test_fake_rw write
+}
+run_test 399a "fake write should not be slower than normal write"
+
+
+test_399b() { # LU-8726 for OST fake read
+       if [ "$(facet_fstype ost1)" != "ldiskfs" ]; then
+               skip "only for ldiskfs" && return 0
+       fi
+       test_fake_rw read
+}
+run_test 399b "fake read should not be slower than normal read"
 
 test_400a() { # LU-1606, was conf-sanity test_74
        local extra_flags=''