3 # Run select tests by setting ONLY, or as arguments to the script.
4 # Skip specific tests by setting EXCEPT.
10 ALWAYS_EXCEPT="$SANITY_DOM_EXCEPT"
11 [ "$SLOW" = "no" ] && EXCEPT_SLOW=""
12 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
14 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
16 . $LUSTRE/tests/test-framework.sh
20 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
23 [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
24 { skip "Need MDS version at least 2.10.56"; exit 0; }
26 MULTIOP=${MULTIOP:-multiop}
27 OPENFILE=${OPENFILE:-openfile}
28 MOUNT_2=${MOUNT_2:-"yes"}
31 check_and_setup_lustre
33 # $RUNAS_ID may get set incorrectly somewhere else
34 if [[ $UID -eq 0 && $RUNAS_ID -eq 0 ]]; then
35 skip_env "\$RUNAS_ID set to 0, but \$UID is also 0!" && exit
37 check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS
42 DOM_SIZE=${DOM_SIZE:-"$((1024*1024))"}
45 trap restore_default_layout EXIT
46 restore_default_layout() {
47 [ -n "$saved_layout" ] && restore_layout $DIR1 $saved_layout ||
48 $LFS setstripe -d $DIR1
51 saved_layout=$(save_layout $DIR1)
52 $LFS setstripe -E $DOM_SIZE -L mdt -E EOF $DIR1
58 dd if=/dev/zero of=$DIR1/$tfile bs=7k count=1 || error "write 1"
59 $TRUNCATE $DIR2/$tfile 1000 || error "truncate"
60 dd if=/dev/zero of=$DIR1/$tfile bs=3k count=1 seek=1 || error "write 2"
61 $CHECKSTAT -t file -s 6144 $DIR2/$tfile || error "stat"
64 run_test 1 "write a file on one mount, truncate on the other, write again"
68 dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=4 || return 1
69 dd if=/dev/zero bs=$SZ1 count=1 >> $DIR/$tfile || return 2
70 dd if=$DIR/$tfile of=$DIR/${tfile}_left bs=1M skip=5 || return 3
71 $CHECKSTAT -t file -s $SZ1 $DIR/${tfile}_left ||
72 error "Error reading at the end of the file $tfile"
74 run_test 2 "Write with a seek, append, read from a single mountpoint"
77 # Write on one node to the DoM stripe and then truncate to over DoM size
78 dd if=/dev/zero of=$DIR1/$tfile bs=$((DOM_SIZE-100)) count=1 ||
80 truncate $DIR1/$tfile $((DOM_SIZE+700)) || return 2
81 # read on the second node inside DoM stripe to take a lock data from
83 dd if=$DIR2/$tfile of=/dev/null bs=4096 count=1 seek=1 || return 3
84 $CHECKSTAT -t file -s $((DOM_SIZE+700)) $DIR2/$tfile ||
85 error "Wrong size after first truncate $tfile on first node"
86 # now do local truncate over DoM size and check size is correct
87 truncate $DIR2/$tfile $((DOM_SIZE+500)) || return 4
88 $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR2/$tfile ||
89 error "Wrong size after second truncate on the same node"
90 $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR1/$tfile ||
91 error "Wrong size after second truncate on other node"
93 run_test 3 "Truncate over DoM size on different nodes"
96 local file1=$DIR1/$tfile
97 local file2=$DIR2/$tfile
100 fsx -c 50 -p 100 -N 1000 -l $((DOM_SIZE*2)) -S 0 -d -d $file1 $file2
102 run_test fsx "Dual-mount fsx with DoM files"
106 [[ -f sanity.sh ]] || { skip "sanity.sh doesn't exist"; return 0; }
108 ONLY="36 39 40 41 42 43 46 56r 101e 119a 131 150 155a 155b 155c \
109 155d 207 241 251" OSC="mdc" DOM="yes" bash sanity.sh
111 run_test sanity "Run sanity with Data-on-MDT files"
115 [[ -f sanityn.sh ]] || { skip "sanityn.sh doesn't exist"; return 0; }
117 ONLY="1 2 4 5 6 7 8 9 10 11 12 14 17 19 20 23 27 39 51a 51c 51d" \
118 OSC="mdc" DOM="yes" bash sanityn.sh
120 run_test sanityn "Run sanityn with Data-on-MDT files"
123 check_and_cleanup_lustre