Whamcloud - gitweb
- landed b_hd_cray_merge3
[fs/lustre-release.git] / lustre / tests / replay-ost-single.sh
1 #!/bin/sh
2
3 set -e
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
7
8 init_test_env $@
9
10 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
11
12 ostfailover_HOST=${ostfailover_HOST:-$ost_HOST}
13
14 # Skip these tests
15 ALWAYS_EXCEPT="5"
16 # test 5 needs a larger fs than what local normally has
17
18 gen_config() {
19     rm -f $XMLCONFIG
20     if [ "$MDSCOUNT" -gt 1 ]; then
21         add_lmv lmv1_svc
22         for mds in `mds_list`; do
23             MDSDEV=$TMP/${mds}-`hostname`
24             add_mds $mds --dev $MDSDEV --size $MDSSIZE  --lmv lmv1_svc
25         done
26         add_lov_to_lmv lov1 lmv1_svc --stripe_sz $STRIPE_BYTES \
27             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
28         MDS=lmv1
29     else
30         add_mds mds1 --dev $MDSDEV --size $MDSSIZE
31         add_lov lov1 mds1 --stripe_sz $STRIPE_BYTES \
32             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
33         MDS=mds1_svc
34
35     fi
36
37     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE --failover
38     if [ ! -z "$ostfailover_HOST" ]; then
39          add_ostfailover ost --dev $OSTDEV --size $OSTSIZE
40     fi
41     add_client client $MDS --lov lov1 --path $MOUNT
42 }
43
44 cleanup() {
45     # make sure we are using the primary MDS, so the config log will
46     # be able to clean up properly.
47     activeost=`facet_active ost`
48     if [ $activeost != "ost" ]; then
49         fail ost
50     fi
51     zconf_umount `hostname` $MOUNT
52     for mds in `mds_list`; do
53         stop $mds ${FORCE} $MDSLCONFARGS
54     done
55     stop ost ${FORCE} --dump cleanup.log
56 }
57
58 if [ "$ONLY" == "cleanup" ]; then
59     sysctl -w portals.debug=0
60     cleanup
61     exit
62 fi
63
64 build_test_filter
65
66 SETUP=${SETUP:-"setup"}
67 CLEANUP=${CLEANUP:-"cleanup"}
68
69 setup() {
70     gen_config
71
72     start ost --reformat $OSTLCONFARGS
73     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
74     for mds in `mds_list`; do
75         start $mds --reformat $MDSLCONFARGS
76     done
77     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
78 }
79
80 mkdir -p $DIR
81
82 $SETUP
83
84 test_0() {
85     fail ost
86     cp /etc/profile  $DIR/$tfile
87     sync
88     diff /etc/profile $DIR/$tfile
89     rm -f $DIR/$tfile
90 }
91 run_test 0 "empty replay"
92
93 test_1() {
94     date > $DIR/$tfile
95     fail ost
96     $CHECKSTAT -t file $DIR/$tfile || return 1
97     rm -f $DIR/$tfile
98 }
99 run_test 1 "touch"
100
101 test_2() {
102     for i in `seq 10`; do
103         echo "tag-$i" > $DIR/$tfile-$i
104     done 
105     fail ost
106     for i in `seq 10`; do
107       grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
108     done 
109     rm -f $DIR/$tfile-*
110 }
111 run_test 2 "|x| 10 open(O_CREAT)s"
112
113 test_3() {
114     verify=$ROOT/tmp/verify-$$
115     dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
116     ddpid=$!
117     sync &
118     fail ost
119     wait $ddpid || return 1
120     cmp $verify $DIR/$tfile || return 2
121     rm -f $verify $DIR/$tfile
122 }
123 run_test 3 "Fail OST during write, with verification"
124
125 test_4() {
126     verify=$ROOT/tmp/verify-$$
127     dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile
128     # invalidate cache, so that we're reading over the wire
129     for i in /proc/fs/lustre/ldlm/namespaces/OSC_*MNT*; do
130         echo -n clear > $i/lru_size
131     done
132     cmp $verify $DIR/$tfile &
133     cmppid=$!
134     fail ost
135     wait $cmppid || return 1
136     rm -f $verify $DIR/$tfile
137 }
138 run_test 4 "Fail OST during read, with verification"
139
140 test_5() {
141     FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
142     case $FREE in
143     *T|*G) FREE=1G;;
144     esac
145     IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
146     iozone $IOZONE_OPTS -f $DIR/$tfile &
147     PID=$!
148     
149     sleep 8
150     fail ost
151     wait $PID || return 1
152     rm -f $DIR/$tfile
153 }
154 run_test 5 "Fail OST during iozone"
155
156 kbytesfree() {
157    awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
158 }
159
160 test_6() {
161     f=$DIR/$tfile
162     rm -f $f
163     sync && sleep 2 && sync     # wait for delete thread
164     before=`kbytesfree`
165     dd if=/dev/urandom bs=4096 count=1280 of=$f
166 #define OBD_FAIL_MDS_REINT_NET_REP       0x119
167     do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
168     sync
169     sleep 1                                     # ensure we have a fresh statfs
170     after_dd=`kbytesfree`
171     log "before: $before after_dd: $after_dd"
172     (( $before > $after_dd )) || return 1
173     rm -f $f
174     fail ost
175     $CHECKSTAT -t file $f && return 2 || true
176     sync
177     # let the delete happen
178     sleep 2
179     after=`kbytesfree`
180     log "before: $before after: $after"
181     (( $before <= $after + 40 )) || return 3    # take OST logs into account
182 }
183 run_test 6 "Fail OST before obd_destroy"
184
185 test_7() {
186     f=$DIR/$tfile
187     rm -f $f
188     sync && sleep 2 && sync     # wait for delete thread
189     before=`kbytesfree`
190     dd if=/dev/urandom bs=4096 count=1280 of=$f
191     sync
192     after_dd=`kbytesfree`
193     log "before: $before after_dd: $after_dd"
194     (( $before > $after_dd )) || return 1
195     replay_barrier ost
196     rm -f $f
197     fail ost
198     $CHECKSTAT -t file $f && return 2 || true
199     sync
200     # let the delete happen
201     sleep 2
202     after=`kbytesfree`
203     log "before: $before after: $after"
204     (( $before <= $after + 40 )) || return 3    # take OST logs into account
205 }
206 run_test 7 "Fail OST before obd_destroy"
207
208 equals_msg test complete, cleaning up
209 $CLEANUP