Whamcloud - gitweb
adjust krb5 related scripts, add krb5 support in replay-ost-single,
[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     stop_lgssd
57     stop_lsvcgssd
58 }
59
60 if [ "$ONLY" == "cleanup" ]; then
61     sysctl -w portals.debug=0
62     cleanup
63     exit
64 fi
65
66 build_test_filter
67
68 SETUP=${SETUP:-"setup"}
69 CLEANUP=${CLEANUP:-"cleanup"}
70
71 setup() {
72     gen_config
73
74     start_krb5_kdc || exit 1
75     start_lsvcgssd || exit 2
76     start_lgssd || exit 3
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
81     done
82     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
83 }
84
85 mkdir -p $DIR
86
87 $SETUP
88
89 test_0() {
90     fail ost
91     cp /etc/profile  $DIR/$tfile
92     sync
93     diff /etc/profile $DIR/$tfile
94     rm -f $DIR/$tfile
95 }
96 run_test 0 "empty replay"
97
98 test_1() {
99     date > $DIR/$tfile
100     fail ost
101     $CHECKSTAT -t file $DIR/$tfile || return 1
102     rm -f $DIR/$tfile
103 }
104 run_test 1 "touch"
105
106 test_2() {
107     for i in `seq 10`; do
108         echo "tag-$i" > $DIR/$tfile-$i
109     done 
110     fail ost
111     for i in `seq 10`; do
112       grep -q "tag-$i" $DIR/$tfile-$i || error "f2-$i"
113     done 
114     rm -f $DIR/$tfile-*
115 }
116 run_test 2 "|x| 10 open(O_CREAT)s"
117
118 test_3() {
119     verify=$ROOT/tmp/verify-$$
120     dd if=/dev/urandom bs=4096 count=1280 | tee $verify > $DIR/$tfile &
121     ddpid=$!
122     sync &
123     fail ost
124     wait $ddpid || return 1
125     cmp $verify $DIR/$tfile || return 2
126     rm -f $verify $DIR/$tfile
127 }
128 run_test 3 "Fail OST during write, with verification"
129
130 test_4() {
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
136     done
137     cmp $verify $DIR/$tfile &
138     cmppid=$!
139     fail ost
140     wait $cmppid || return 1
141     rm -f $verify $DIR/$tfile
142 }
143 run_test 4 "Fail OST during read, with verification"
144
145 test_5() {
146     FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
147     case $FREE in
148     *T|*G) FREE=1G;;
149     esac
150     IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
151     iozone $IOZONE_OPTS -f $DIR/$tfile &
152     PID=$!
153     
154     sleep 8
155     fail ost
156     wait $PID || return 1
157     rm -f $DIR/$tfile
158 }
159 run_test 5 "Fail OST during iozone"
160
161 kbytesfree() {
162    awk '{total+=$1} END {print total}' /proc/fs/lustre/osc/OSC_*MNT*/kbytesfree
163 }
164
165 test_6() {
166     f=$DIR/$tfile
167     rm -f $f
168     sync && sleep 2 && sync     # wait for delete thread
169     before=`kbytesfree`
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"
173     sync
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
178     rm -f $f
179     fail ost
180     $CHECKSTAT -t file $f && return 2 || true
181     sync
182     # let the delete happen
183     sleep 2
184     after=`kbytesfree`
185     log "before: $before after: $after"
186     (( $before <= $after + 40 )) || return 3    # take OST logs into account
187 }
188 run_test 6 "Fail OST before obd_destroy"
189
190 test_7() {
191     f=$DIR/$tfile
192     rm -f $f
193     sync && sleep 2 && sync     # wait for delete thread
194     before=`kbytesfree`
195     dd if=/dev/urandom bs=4096 count=1280 of=$f
196     sync
197     after_dd=`kbytesfree`
198     log "before: $before after_dd: $after_dd"
199     (( $before > $after_dd )) || return 1
200     replay_barrier ost
201     rm -f $f
202     fail ost
203     $CHECKSTAT -t file $f && return 2 || true
204     sync
205     # let the delete happen
206     sleep 2
207     after=`kbytesfree`
208     log "before: $before after: $after"
209     (( $before <= $after + 40 )) || return 3    # take OST logs into account
210 }
211 run_test 7 "Fail OST before obd_destroy"
212
213 equals_msg test complete, cleaning up
214 $CLEANUP