Whamcloud - gitweb
- landing of b_hd_cleanup_merge to HEAD.
[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     IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 64 -s 1g"
142     iozone $IOZONE_OPTS -f $DIR/$tfile &
143     PID=$!
144     
145     sleep 10
146     fail ost
147     wait $PID || return 1
148     rm -f $DIR/$tfile
149 }
150 run_test 5 "Fail OST during iozone"
151
152 kbytesfree() {
153    awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
154 }
155
156 test_6() {
157     f=$DIR/$tfile
158     rm -f $f
159     sync && sleep 2 && sync     # wait for delete thread
160     before=`kbytesfree`
161     dd if=/dev/urandom bs=4096 count=1280 of=$f
162 #define OBD_FAIL_MDS_REINT_NET_REP       0x119
163     do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
164     sync
165     sleep 1                                     # ensure we have a fresh statfs
166     after_dd=`kbytesfree`
167     log "before: $before after_dd: $after_dd"
168     (( $before > $after_dd )) || return 1
169     rm -f $f
170     fail ost
171     $CHECKSTAT -t file $f && return 2 || true
172     sync
173     # let the delete happen
174     sleep 2
175     after=`kbytesfree`
176     log "before: $before after: $after"
177     (( $before <= $after + 40 )) || return 3    # take OST logs into account
178 }
179 run_test 6 "Fail OST before obd_destroy"
180
181 test_7() {
182     f=$DIR/$tfile
183     rm -f $f
184     sync && sleep 2 && sync     # wait for delete thread
185     before=`kbytesfree`
186     dd if=/dev/urandom bs=4096 count=1280 of=$f
187     sync
188     after_dd=`kbytesfree`
189     log "before: $before after_dd: $after_dd"
190     (( $before > $after_dd )) || return 1
191     replay_barrier ost
192     rm -f $f
193     fail ost
194     $CHECKSTAT -t file $f && return 2 || true
195     sync
196     # let the delete happen
197     sleep 2
198     after=`kbytesfree`
199     log "before: $before after: $after"
200     (( $before <= $after + 40 )) || return 3    # take OST logs into account
201 }
202 run_test 7 "Fail OST before obd_destroy"
203
204 equals_msg test complete, cleaning up
205 $CLEANUP