Whamcloud - gitweb
LU-15061 tests: fix sanity-dom exit status
[fs/lustre-release.git] / lustre / tests / sanity-dom.sh
index 41b29eb..4fa9ce4 100644 (file)
@@ -19,8 +19,8 @@ ALWAYS_EXCEPT="$SANITY_DOM_EXCEPT"
 
 build_test_filter
 
-[[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
-       { skip "Need MDS version at least 2.10.56"; exit 0; }
+[[ "$MDS1_VERSION" -ge $(version_code 2.10.56) ]] ||
+       skip "Need MDS version at least 2.10.56"
 
 OPENFILE=${OPENFILE:-openfile}
 MOUNT_2=${MOUNT_2:-"yes"}
@@ -67,14 +67,14 @@ test_3() {
        # Write on one node to the DoM stripe and then truncate to over DoM size
        dd if=/dev/zero of=$DIR1/$tfile bs=$((DOM_SIZE-100)) count=1 ||
                return 1
-       truncate $DIR1/$tfile $((DOM_SIZE+700)) || return 2
+       $TRUNCATE $DIR1/$tfile $((DOM_SIZE+700)) || return 2
        # read on the second node inside DoM stripe to take a lock data from
        # the first client
        dd if=$DIR2/$tfile of=/dev/null bs=4096 count=1 seek=1 || return 3
        $CHECKSTAT -t file -s $((DOM_SIZE+700)) $DIR2/$tfile ||
                error "Wrong size after first truncate $tfile on first node"
        # now do local truncate over DoM size and check size is correct
-       truncate $DIR2/$tfile $((DOM_SIZE+500)) || return 4
+       $TRUNCATE $DIR2/$tfile $((DOM_SIZE+500)) || return 4
        $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR2/$tfile ||
                error "Wrong size after second truncate on the same node"
        $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR1/$tfile ||
@@ -106,6 +106,41 @@ test_4() {
 }
 run_test 4 "DoM: glimpse doesn't produce duplicated locks"
 
+test_5() {
+       local before=$(date +%s)
+       local evict
+
+       dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 || return 1
+
+       multiop_bg_pause $DIR/$tfile O_Ac || return 1
+       setxattr=$!
+
+       multiop_bg_pause $DIR/$tfile O_Tc || return 1
+       truncate=$!
+
+       multiop $DIR2/$tfile Ow10 || return 1
+
+       getfattr -d $DIR2/$tfile
+
+#define OBD_FAIL_LLITE_TRUNCATE_INODE_PAUSE        0x1415
+       $LCTL set_param fail_loc=0x80001415 fail_val=5
+       kill -USR1 $truncate
+       sleep 1
+       multiop $DIR2/$tfile Ow10 &
+       sleep 1
+       kill -USR1 $setxattr
+
+       wait
+
+       evict=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state |
+         awk -F"[ [,]" '/EVICTED ]$/ { if (mx<$5) {mx=$5;} } END { print mx }')
+
+       [ -z "$evict" ] || [[ $evict -le $before ]] ||
+               (do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state;
+                       error "eviction happened: $evict before:$before")
+}
+run_test 5 "DoM truncate deadlock"
+
 test_6() {
        $MULTIOP $DIR1/$tfile Oz40960w100_z200w100c &
        MULTIPID=$!
@@ -120,34 +155,71 @@ test_6() {
 }
 run_test 6 "Race two writes, check file size"
 
+test_7() {
+       dd if=/dev/zero of=$DIR1/$tfile bs=1000 count=1
+       cancel_lru_locks
+
+       $MULTIOP $DIR1/$tfile or1000c
+       dd if=/dev/urandom of=$DIR2/$tfile bs=1000 count=1
+       local md5_1=$(md5sum $DIR/$tfile | awk '{ print $1 }')
+       local md5_2=$(md5sum $DIR2/$tfile | awk '{ print $1 }')
+       [[ $md5_1 == $md5_2 ]] ||
+               error "Client reads stale page"
+}
+run_test 7 "Stale pages after read-on-open"
+
 test_fsx() {
        local file1=$DIR1/$tfile
        local file2=$DIR2/$tfile
 
+       check_set_fallocate
+
        touch $file1
-       fsx -c 50 -p 100 -N 1000 -l $((DOM_SIZE*2)) -S 0 -d -d $file1 $file2
+       $FSX -c 50 -p 100 -N 1000 -l $((DOM_SIZE*2)) -S 0 -d -d $file1 $file2
 }
 run_test fsx "Dual-mount fsx with DoM files"
 
 test_sanity()
 {
+       local testlist="36 39 40 41 42d 42e 43 46 56r 101e 119a \
+                       131 150a 155a 155b 155c 155d 207 241 251"
+
+       # Fallocate tests
+       (( $MDS1_VERSION >= $(version_code 2.14.52) )) &&
+               testlist+=" 150b 150bb 150c 150d 150f 150g"
+
+       SANITY_ONLY=${SANITY_ONLY:-$testlist}
+       SANITY_REPEAT=${SANITY_REPEAT:-1}
        # XXX: to fix 45. Add 42a, c when LU-9693 fixed.
        # Add 42b when LU-6493 fixed
-       # Enable 39k when LU-10496 fixed
-       ONLY="36 39 40 41 42d 42e 43 46 56r 101e 119a 131 150 155a 155b 155c \
-               155d 207 241 251" \
-               EXCEPT=39k OSC="mdc" DOM="yes" bash sanity.sh
+       ONLY=$SANITY_ONLY ONLY_REPEAT=$SANITY_REPEAT OSC="mdc" DOM="yes" \
+               bash sanity.sh
+
+       return 0
 }
 run_test sanity "Run sanity with Data-on-MDT files"
 
 test_sanityn()
 {
+       local testlist="1 2 4 5 6 7 8 9 10 11 12 14 17 19 20 \
+                       23 27 39 51a 51c 51d"
+
+       if [[ $MDS1_VERSION -ge $(version_code 2.13.55) ]]; then
+               testlist+=" 107"
+       fi
+
+       SANITYN_ONLY=${SANITYN_ONLY:-$testlist}
+       SANITYN_REPEAT=${SANITYN_REPEAT:-1}
        # XXX: to fix 60
-       ONLY="1 2 4 5 6 7 8 9 10 11 12 14 17 19 20 23 27 39 51a 51c 51d" \
-               OSC="mdc" DOM="yes" bash sanityn.sh
+       ONLY=$SANITYN_ONLY ONLY_REPEAT=$SANITYN_REPEAT OSC="mdc" DOM="yes" \
+               bash sanityn.sh
+
+       return 0
 }
 run_test sanityn "Run sanityn with Data-on-MDT files"
 
 complete $SECONDS
 check_and_cleanup_lustre
-exit_status
+declare -a logs=($ONLY)
+logs=("${logs[@]/#/$TMP/}")
+exit_status "$(echo ${logs[@]/%/.log})"