Whamcloud - gitweb
da1f2a993e9e512b6f755d2f29cd70c53036c7b9
[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/local.sh}
11
12 ostfailover_HOST=${ostfailover_HOST:-$ost_HOST}
13
14 # Skip these tests
15 # BUG NUMBER: 2766?
16 ALWAYS_EXCEPT="5"
17
18 gen_config() {
19     rm -f $XMLCONFIG
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
26     fi
27     add_client client mds --lov lov1 --path $MOUNT
28 }
29
30 cleanup() {
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
35         fail ost
36     fi
37     zconf_umount `hostname` $MOUNT
38     stop mds ${FORCE} $MDSLCONFARGS
39     stop ost ${FORCE} --dump $TMP/replay-ost-single-`hostname`.log
40 }
41
42 if [ "$ONLY" == "cleanup" ]; then
43     sysctl -w portals.debug=0
44     cleanup
45     exit
46 fi
47
48 build_test_filter
49
50 SETUP=${SETUP:-"setup"}
51 CLEANUP=${CLEANUP:-"cleanup"}
52
53 setup() {
54     gen_config
55
56     start ost --reformat $OSTLCONFARGS
57     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
58     start mds --reformat $MDSLCONFARGS
59
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`"
63
64         #define OBD_FAIL_OST_ALL_REPLY_NET       0x211
65         do_facet ost "sysctl -w lustre.fail_loc=0x80000211"
66
67         zconf_mount `hostname` $MOUNT && df $MOUNT && pass || error "mount fail"
68     fi
69 }
70
71 mkdir -p $DIR
72
73 $SETUP
74
75 test_0() {
76     fail ost
77     cp /etc/profile  $DIR/$tfile
78     sync
79     diff /etc/profile $DIR/$tfile
80     rm -f $DIR/$tfile
81 }
82 run_test 0 "empty replay"
83
84 test_1() {
85     date > $DIR/$tfile
86     fail ost
87     $CHECKSTAT -t file $DIR/$tfile || return 1
88     rm -f $DIR/$tfile
89 }
90 run_test 1 "touch"
91
92 test_2() {
93     for i in `seq 10`; do
94         echo "tag-$i" > $DIR/$tfile-$i
95     done 
96     fail ost
97     for i in `seq 10`; do
98       grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
99     done 
100     rm -f $DIR/$tfile-*
101 }
102 run_test 2 "|x| 10 open(O_CREAT)s"
103
104 test_3() {
105     verify=$ROOT/tmp/verify-$$
106     dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
107     ddpid=$!
108     sync &
109     fail ost
110     wait $ddpid || return 1
111     cmp $verify $DIR/$tfile || return 2
112     rm -f $verify $DIR/$tfile
113 }
114 run_test 3 "Fail OST during write, with verification"
115
116 test_4() {
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
122     done
123     cmp $verify $DIR/$tfile &
124     cmppid=$!
125     fail ost
126     wait $cmppid || return 1
127     rm -f $verify $DIR/$tfile
128 }
129 run_test 4 "Fail OST during read, with verification"
130
131 test_5() {
132     FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
133     case $FREE in
134     *T|*G) FREE=1G;;
135     esac
136     IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
137     iozone $IOZONE_OPTS -f $DIR/$tfile &
138     PID=$!
139     
140     sleep 8
141     fail ost
142     wait $PID || return 1
143     rm -f $DIR/$tfile
144 }
145 run_test 5 "Fail OST during iozone"
146
147 kbytesfree() {
148    awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
149 }
150
151 test_6() {
152     f=$DIR/$tfile
153     rm -f $f
154     sync && sleep 2 && sync     # wait for delete thread
155     before=`kbytesfree`
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"
159     sync
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
164     rm -f $f
165     fail ost
166     $CHECKSTAT -t file $f && return 2 || true
167     sync
168     # let the delete happen
169     sleep 2
170     after=`kbytesfree`
171     log "before: $before after: $after"
172     (( $before <= $after + 40 )) || return 3    # take OST logs into account
173 }
174 run_test 6 "Fail OST before obd_destroy"
175
176 test_7() {
177     f=$DIR/$tfile
178     rm -f $f
179     sync && sleep 2 && sync     # wait for delete thread
180     before=`kbytesfree`
181     dd if=/dev/urandom bs=4096 count=1280 of=$f
182     sync
183     after_dd=`kbytesfree`
184     log "before: $before after_dd: $after_dd"
185     (( $before > $after_dd )) || return 1
186     replay_barrier ost
187     rm -f $f
188     fail ost
189     $CHECKSTAT -t file $f && return 2 || true
190     sync
191     # let the delete happen
192     sleep 2
193     after=`kbytesfree`
194     log "before: $before after: $after"
195     (( $before <= $after + 40 )) || return 3    # take OST logs into account
196 }
197 run_test 7 "Fail OST before obd_destroy"
198
199 equals_msg test complete, cleaning up
200 $CLEANUP