Whamcloud - gitweb
7c4747953d5958c51ed0f0e6284c514897f7b3a9
[fs/lustre-release.git] / lustre / tests / sanity-dom.sh
1 #!/bin/bash
2 #
3 # Run select tests by setting ONLY, or as arguments to the script.
4 # Skip specific tests by setting EXCEPT.
5 #
6
7 set -e
8
9 ONLY=${ONLY:-"$*"}
10 ALWAYS_EXCEPT="$SANITY_DOM_EXCEPT"
11 [ "$SLOW" = "no" ] && EXCEPT_SLOW=""
12 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
13
14 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
15
16 . $LUSTRE/tests/test-framework.sh
17 CLEANUP=${CLEANUP:-:}
18 SETUP=${SETUP:-:}
19 init_test_env $@
20 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
21 init_logging
22
23 MULTIOP=${MULTIOP:-multiop}
24 OPENFILE=${OPENFILE:-openfile}
25 MOUNT_2=${MOUNT_2:-"yes"}
26 FAIL_ON_ERROR=false
27
28 check_and_setup_lustre
29
30 # $RUNAS_ID may get set incorrectly somewhere else
31 if [[ $UID -eq 0 && $RUNAS_ID -eq 0 ]]; then
32         skip_env "\$RUNAS_ID set to 0, but \$UID is also 0!" && exit
33 fi
34 check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS
35
36 build_test_filter
37
38 DOM="yes"
39 DOM_SIZE=${DOM_SIZE:-"$((1024*1024))"}
40 OSC="mdc"
41
42 lfs setstripe -E $DOM_SIZE -L mdt -E EOF $DIR1
43
44 mkdir -p $MOUNT2
45 mount_client $MOUNT2
46
47 lctl set_param debug=0xffffffff 2> /dev/null
48
49 test_1() {
50         dd if=/dev/zero of=$DIR1/$tfile bs=7k count=1 || error "write 1"
51         $TRUNCATE $DIR2/$tfile 1000 || error "truncate"
52         dd if=/dev/zero of=$DIR1/$tfile bs=3k count=1 seek=1 || error "write 2"
53         $CHECKSTAT -t file -s 6144 $DIR2/$tfile || error "stat"
54         rm $DIR1/$tfile
55 }
56 run_test 1 "write a file on one mount, truncate on the other, write again"
57
58 test_2() {
59         SZ1=234852
60         dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=4 || return 1
61         dd if=/dev/zero bs=$SZ1 count=1 >> $DIR/$tfile || return 2
62         dd if=$DIR/$tfile of=$DIR/${tfile}_left bs=1M skip=5 || return 3
63         $CHECKSTAT -t file -s $SZ1 $DIR/${tfile}_left ||
64                 error "Error reading at the end of the file $tfile"
65 }
66 run_test 2 "Write with a seek, append, read from a single mountpoint"
67
68 test_3() {
69         # Write on one node to the DoM stripe and then truncate to over DoM size
70         dd if=/dev/zero of=$DIR1/$tfile bs=$((DOM_SIZE-100)) count=1 ||
71                 return 1
72         truncate $DIR1/$tfile $((DOM_SIZE+700)) || return 2
73         # read on the second node inside DoM stripe to take a lock data from
74         # the first client
75         dd if=$DIR2/$tfile of=/dev/null bs=4096 count=1 seek=1 || return 3
76         $CHECKSTAT -t file -s $((DOM_SIZE+700)) $DIR2/$tfile ||
77                 error "Wrong size after first truncate $tfile on first node"
78         # now do local truncate over DoM size and check size is correct
79         truncate $DIR2/$tfile $((DOM_SIZE+500)) || return 4
80         $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR2/$tfile ||
81                 error "Wrong size after second truncate on the same node"
82         $CHECKSTAT -t file -s $((DOM_SIZE+500)) $DIR1/$tfile ||
83                 error "Wrong size after second truncate on other node"
84 }
85 run_test 3 "Truncate over DoM size on different nodes"
86
87 # TODO: tests below are from sanityn but their adapted version should be
88 # put here: 31 32 34 71 75
89
90 test_sn16() {
91         local file1=$DIR1/$tfile
92         local file2=$DIR2/$tfile
93
94         touch $file1
95         fsx -c 50 -p 1 -N 1000 -l $(($DOM_SIZE*2)) -S 0 -d -d $file1 $file2
96 }
97 run_test sn16 "$FSXNUM iterations of dual-mount fsx"
98
99 test_sanity()
100 {
101         local SAVE_ONLY=$ONLY
102
103         [ ! -f sanity.sh ] && skip_env "No sanity.sh skipping" && return
104         # XXX: to fix 45
105         ONLY="36 39 40 41 42 43 46 56r 101e 119a 131 150 155a 155b 155c \
106                 155d 207 241 251" OSC="mdc" DOM="yes" sh sanity.sh
107         ONLY=$SAVE_ONLY
108 }
109 run_test sanity "Run sanity with Data-on-MDT files"
110
111 test_sanityn()
112 {
113         local SAVE_ONLY=$ONLY
114
115         [ ! -f sanity.sh ] && skip_env "No sanity.sh skipping" && return
116         # XXX: to fix 60
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" sh sanityn.sh
119         ONLY=$SAVE_ONLY
120 }
121 run_test sanityn "Run sanityn with Data-on-MDT files"
122
123 complete $SECONDS
124 check_and_cleanup_lustre
125 exit_status