5 PTLDEBUG=${PTLDEBUG:--1}
6 LUSTRE=${LUSTRE:-`dirname $0`/..}
7 . $LUSTRE/tests/test-framework.sh
9 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
11 ostfailover_HOST=${ostfailover_HOST:-$ost_HOST}
12 #failover= must be defined in OST_MKFS_OPTIONS if ostfailover_HOST != ost_HOST
14 # Tests that fail on uml
15 CPU=`awk '/model/ {print $4}' /proc/cpuinfo`
16 [ "$CPU" = "UML" ] && EXCEPT="$EXCEPT 6"
20 ALWAYS_EXCEPT="$REPLAY_OST_SINGLE_EXCEPT"
22 # It is replay-ost-single, after all
33 if [ "$ONLY" == "cleanup" ]; then
40 SETUP=${SETUP:-"setup"}
41 CLEANUP=${CLEANUP:-"cleanup"}
45 start mds $MDSDEV $MDS_MOUNT_OPTS
46 start ost1 `ostdevname 1` $OST_MOUNT_OPTS
47 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
49 if [ -z "`grep " $MOUNT " /proc/mounts`" ]; then
50 # test "-1" needed during initial client->OST connection
51 log "== test 00: target handle mismatch (bug 5317) === `date +%H:%M:%S`"
52 #define OBD_FAIL_OST_ALL_REPLY_NET 0x211
53 do_facet ost1 "sysctl -w lustre.fail_loc=0x80000211"
54 zconf_mount `hostname` $MOUNT && df $MOUNT && pass || error "mount fail"
64 cp /etc/profile $DIR/$tfile
66 diff /etc/profile $DIR/$tfile
69 run_test 0 "empty replay"
74 $CHECKSTAT -t file $DIR/$tfile || return 1
81 echo "tag-$i" > $DIR/$tfile-$i
85 grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
89 run_test 2 "|x| 10 open(O_CREAT)s"
92 verify=$ROOT/tmp/verify-$$
93 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
97 wait $ddpid || return 1
98 cmp $verify $DIR/$tfile || return 2
99 rm -f $verify $DIR/$tfile
101 run_test 3 "Fail OST during write, with verification"
104 verify=$ROOT/tmp/verify-$$
105 dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile
106 # invalidate cache, so that we're reading over the wire
107 for i in /proc/fs/lustre/ldlm/namespaces/*-osc-*; do
108 echo -n clear > $i/lru_size
110 cmp $verify $DIR/$tfile &
113 wait $cmppid || return 1
114 rm -f $verify $DIR/$tfile
116 run_test 4 "Fail OST during read, with verification"
119 [ -z "`which iozone 2> /dev/null`" ] && log "iozone missing" && return
120 FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
124 IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
125 iozone $IOZONE_OPTS -f $DIR/$tfile &
130 wait $PID || return 1
133 run_test 5 "Fail OST during iozone"
136 awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/*-osc-*/kbytesfree
142 sync && sleep 2 && sync # wait for delete thread
144 dd if=/dev/urandom bs=4096 count=1280 of=$f || return 28
146 #define OBD_FAIL_MDS_REINT_NET_REP 0x119
147 do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
149 sleep 1 # ensure we have a fresh statfs
151 after_dd=`kbytesfree`
152 log "before: $before after_dd: $after_dd"
153 (( $before > $after_dd )) || return 1
156 $CHECKSTAT -t file $f && return 2 || true
158 # let the delete happen
161 log "before: $before after: $after"
162 (( $before <= $after + 40 )) || return 3 # take OST logs into account
164 run_test 6 "Fail OST before obd_destroy"
169 sync && sleep 2 && sync # wait for delete thread
171 dd if=/dev/urandom bs=4096 count=1280 of=$f
173 sleep 1 # ensure we have a fresh statfs
174 after_dd=`kbytesfree`
175 log "before: $before after_dd: $after_dd"
176 (( $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 7 "Fail OST before obd_destroy"
190 equals_msg test complete, cleaning up