5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 . $LUSTRE/tests/test-framework.sh
10 . ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
12 ostfailover_HOST=${ostfailover_HOST:-$ost_HOST}
20 add_mds mds --dev $MDSDEV --size $MDSSIZE
21 add_lov lov1 mds --stripe_sz $STRIPE_BYTES \
22 --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
23 add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE --failover
24 if [ ! -z "$ostfailover_HOST" ]; then
25 add_ostfailover ost --dev $OSTDEV --size $OSTSIZE
27 add_client client mds --lov lov1 --path $MOUNT
31 # make sure we are using the primary MDS, so the config log will
32 # be able to clean up properly.
33 activeost=`facet_active ost`
34 if [ $activeost != "ost" ]; then
37 zconf_umount `hostname` $MOUNT
38 stop mds ${FORCE} $MDSLCONFARGS
39 stop ost ${FORCE} --dump $TMP/replay-ost-single-`hostname`.log
42 if [ "$ONLY" == "cleanup" ]; then
43 sysctl -w portals.debug=0
50 SETUP=${SETUP:-"setup"}
51 CLEANUP=${CLEANUP:-"cleanup"}
56 start ost --reformat $OSTLCONFARGS
57 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
58 start mds --reformat $MDSLCONFARGS
60 if [ -z "`grep " $MOUNT " /proc/mounts`" ]; then
61 # test "-1" needed during initial client->OST connection
62 log "== test 00: target handle mismatch (bug 5317) === `date +%H:%M:%S`"
64 #define OBD_FAIL_OST_ALL_REPLY_NET 0x211
65 do_facet ost "sysctl -w lustre.fail_loc=0x80000211"
67 zconf_mount `hostname` $MOUNT && df $MOUNT && pass || error "mount fail"
77 cp /etc/profile $DIR/$tfile
79 diff /etc/profile $DIR/$tfile
82 run_test 0 "empty replay"
87 $CHECKSTAT -t file $DIR/$tfile || return 1
94 echo "tag-$i" > $DIR/$tfile-$i
98 grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
102 run_test 2 "|x| 10 open(O_CREAT)s"
105 verify=$ROOT/tmp/verify-$$
106 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
110 wait $ddpid || return 1
111 cmp $verify $DIR/$tfile || return 2
112 rm -f $verify $DIR/$tfile
114 run_test 3 "Fail OST during write, with verification"
117 verify=$ROOT/tmp/verify-$$
118 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile
119 # invalidate cache, so that we're reading over the wire
120 for i in /proc/fs/lustre/ldlm/namespaces/OSC_*MNT*; do
121 echo -n clear > $i/lru_size
123 cmp $verify $DIR/$tfile &
126 wait $cmppid || return 1
127 rm -f $verify $DIR/$tfile
129 run_test 4 "Fail OST during read, with verification"
132 FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
136 IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
137 iozone $IOZONE_OPTS -f $DIR/$tfile &
142 wait $PID || return 1
145 run_test 5 "Fail OST during iozone"
148 awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
154 sync && sleep 2 && sync # wait for delete thread
156 dd if=/dev/urandom bs=4096 count=1280 of=$f
157 #define OBD_FAIL_MDS_REINT_NET_REP 0x119
158 do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
160 sleep 1 # ensure we have a fresh statfs
161 after_dd=`kbytesfree`
162 log "before: $before after_dd: $after_dd"
163 (( $before > $after_dd )) || return 1
166 $CHECKSTAT -t file $f && return 2 || true
168 # let the delete happen
171 log "before: $before after: $after"
172 (( $before <= $after + 40 )) || return 3 # take OST logs into account
174 run_test 6 "Fail OST before obd_destroy"
179 sync && sleep 2 && sync # wait for delete thread
181 dd if=/dev/urandom bs=4096 count=1280 of=$f
183 after_dd=`kbytesfree`
184 log "before: $before after_dd: $after_dd"
185 (( $before > $after_dd )) || return 1
189 $CHECKSTAT -t file $f && return 2 || true
191 # let the delete happen
194 log "before: $before after: $after"
195 (( $before <= $after + 40 )) || return 3 # take OST logs into account
197 run_test 7 "Fail OST before obd_destroy"
199 equals_msg test complete, cleaning up