5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
10 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
12 ostfailover_HOST=${ostfailover_HOST:-$ost_HOST}
16 # test 5 needs a larger fs than what local normally has
20 if [ "$MDSCOUNT" -gt 1 ]; then
22 for mds in `mds_list`; do
23 MDSDEV=$TMP/${mds}-`hostname`
24 add_mds $mds --dev $MDSDEV --size $MDSSIZE --lmv lmv1_svc
26 add_lov_to_lmv lov1 lmv1_svc --stripe_sz $STRIPE_BYTES \
27 --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
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
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
41 add_client client $MDS --lov lov1 --path $MOUNT
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
51 zconf_umount `hostname` $MOUNT
52 for mds in `mds_list`; do
53 stop $mds ${FORCE} $MDSLCONFARGS
55 stop ost ${FORCE} --dump cleanup.log
60 if [ "$ONLY" == "cleanup" ]; then
61 sysctl -w portals.debug=0
68 SETUP=${SETUP:-"setup"}
69 CLEANUP=${CLEANUP:-"cleanup"}
74 start_krb5_kdc || exit 1
75 start_lsvcgssd || exit 2
77 start ost --reformat $OSTLCONFARGS
78 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
79 for mds in `mds_list`; do
80 start $mds --reformat $MDSLCONFARGS
82 grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
91 cp /etc/profile $DIR/$tfile
93 diff /etc/profile $DIR/$tfile
96 run_test 0 "empty replay"
101 $CHECKSTAT -t file $DIR/$tfile || return 1
107 for i in `seq 10`; do
108 echo "tag-$i" > $DIR/$tfile-$i
111 for i in `seq 10`; do
112 grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
116 run_test 2 "|x| 10 open(O_CREAT)s"
119 verify=$ROOT/tmp/verify-$$
120 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
124 wait $ddpid || return 1
125 cmp $verify $DIR/$tfile || return 2
126 rm -f $verify $DIR/$tfile
128 run_test 3 "Fail OST during write, with verification"
131 verify=$ROOT/tmp/verify-$$
132 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile
133 # invalidate cache, so that we're reading over the wire
134 for i in /proc/fs/lustre/ldlm/namespaces/OSC_*MNT*; do
135 echo -n clear > $i/lru_size
137 cmp $verify $DIR/$tfile &
140 wait $cmppid || return 1
141 rm -f $verify $DIR/$tfile
143 run_test 4 "Fail OST during read, with verification"
146 FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
150 IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
151 iozone $IOZONE_OPTS -f $DIR/$tfile &
156 wait $PID || return 1
159 run_test 5 "Fail OST during iozone"
162 awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
168 sync && sleep 2 && sync # wait for delete thread
170 dd if=/dev/urandom bs=4096 count=1280 of=$f
171 #define OBD_FAIL_MDS_REINT_NET_REP 0x119
172 do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
174 sleep 1 # ensure we have a fresh statfs
175 after_dd=`kbytesfree`
176 log "before: $before after_dd: $after_dd"
177 (( $before > $after_dd )) || return 1
180 $CHECKSTAT -t file $f && return 2 || true
182 # let the delete happen
185 log "before: $before after: $after"
186 (( $before <= $after + 40 )) || return 3 # take OST logs into account
188 run_test 6 "Fail OST before obd_destroy"
193 sync && sleep 2 && sync # wait for delete thread
195 dd if=/dev/urandom bs=4096 count=1280 of=$f
197 after_dd=`kbytesfree`
198 log "before: $before after_dd: $after_dd"
199 (( $before > $after_dd )) || return 1
203 $CHECKSTAT -t file $f && return 2 || true
205 # let the delete happen
208 log "before: $before after: $after"
209 (( $before <= $after + 40 )) || return 3 # take OST logs into account
211 run_test 7 "Fail OST before obd_destroy"
213 equals_msg test complete, cleaning up