Whamcloud - gitweb
land v0.9.1 on HEAD, in preparation for a 1.0.x branch
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
1 #!/bin/sh
2
3 set -ex
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 LTESTDIR=${LTESTDIR:-$LUSTRE/../ltest}
7 PATH=$PATH:$LUSTRE/utils:$LUSTRE/tests
8
9 RLUSTRE=${RLUSTRE:-$LUSTRE}
10 RPWD=${RPWD:-$PWD}
11
12 . $LUSTRE/tests/test-framework.sh
13
14 # Allow us to override the setup if we already have a mounted system by
15 # setting SETUP=" " and CLEANUP=" "
16 SETUP=${SETUP:-"setup"}
17 CLEANUP=${CLEANUP:-"cleanup"}
18
19 PDSH=${PDSH:-'pdsh -S -w'}
20
21 # XXX I wish all this stuff was in some default-config.sh somewhere
22 MDSNODE=${MDSNODE:-mdev6}
23 OSTNODE=${OSTNODE:-mdev7}
24 CLIENT=${CLIENT:-mdev8}
25 NETWORKTYPE=${NETWORKTYPE:-tcp}
26 MOUNTPT=${MOUNTPT:-/mnt/lustre}
27 CONFIG=${CONFIG:-recovery-small.xml}
28 MDSDEV=${MDSDEV:-/tmp/mds-`hostname`}
29 MDSSIZE=${MDSSIZE:-100000}
30 OSTDEV=${OSTDEV:-/tmp/ost-`hostname`}
31 OSTSIZE=${OSTSIZE:-100000}
32 UPCALL=${UPCALL:-$RPWD/recovery-small-upcall.sh}
33 FSTYPE=${FSTYPE:-ext3}
34 TIMEOUT=${TIMEOUT:-5}
35 do_mds() {
36     $PDSH $MDSNODE "PATH=\$PATH:$RLUSTRE/utils:$RLUSTRE/tests; cd $RPWD; $@" || exit $?
37 }
38
39 do_client() {
40     $PDSH $CLIENT "PATH=\$PATH:$RLUSTRE/utils:$RLUSTRE/tests; cd $RPWD; $@"  || exit $?
41 }
42
43 do_ost() {
44     $PDSH $OSTNODE "PATH=\$PATH:$RLUSTRE/utils:$RLUSTRE/tests; cd $RPWD; $@" || exit $?
45 }
46
47 drop_request() {
48 # OBD_FAIL_MDS_ALL_REQUEST_NET
49     do_mds "echo 0x123 > /proc/sys/lustre/fail_loc"
50     do_client "$1"
51     do_mds "echo 0 > /proc/sys/lustre/fail_loc"
52 }
53
54 drop_reply() {
55 # OBD_FAIL_MDS_ALL_REPLY_NET
56     do_mds "echo 0x122 > /proc/sys/lustre/fail_loc"
57     do_client "$@"
58     do_mds "echo 0 > /proc/sys/lustre/fail_loc"
59 }
60
61 pause_bulk() {
62 #define OBD_FAIL_OST_BRW_PAUSE_BULK      0x214
63     do_ost "echo 0x214 > /proc/sys/lustre/fail_loc"
64     do_client "$1"
65     do_client "sync"
66     do_ost "echo 0 > /proc/sys/lustre/fail_loc"
67 }
68 make_config() {
69     rm -f $CONFIG
70     for NODE in $CLIENT $MDSNODE $OSTNODE; do
71        lmc -m $CONFIG --add net --node $NODE --nid `h2$NETWORKTYPE $NODE` \
72            --nettype $NETWORKTYPE || exit 4
73     done
74     lmc -m $CONFIG --add mds --node $MDSNODE --mds mds1 --dev $MDSDEV \
75         --size $MDSSIZE --fstype $FSTYPE || exit 5
76     lmc -m $CONFIG --add lov --lov lov1 --mds mds1 --stripe_sz 65536 \
77         --stripe_cnt 0 --stripe_pattern 0 || exit 6 
78     lmc -m $CONFIG --add ost --nspath /mnt/ost_ns --node $OSTNODE \
79         --lov lov1 --dev $OSTDEV --size $OSTSIZE --fstype $FSTYPE || exit 7
80     lmc -m $CONFIG --add mtpt --node $CLIENT --path $MOUNTPT --mds mds1 \
81         --lov lov1 || exit 8
82 }
83
84 start_mds() {
85     do_mds "lconf $@ $CONFIG"
86 }
87
88 shutdown_mds() {
89     do_mds "lconf $@ --cleanup $CONFIG"
90 }
91
92 start_ost() {
93     do_ost "lconf $@ $CONFIG"
94 }
95
96 shutdown_ost() {
97     do_ost "lconf $@ --cleanup $CONFIG"
98 }
99
100 mount_client() {
101     do_client "lconf $@ $CONFIG"
102 }
103
104 unmount_client() {
105     do_client "lconf $@ --cleanup $CONFIG"
106 }
107
108 setup() {
109     start_ost --timeout=$TIMEOUT ${REFORMAT}
110     start_mds --timeout=$TIMEOUT ${REFORMAT}
111     # XXX we should write our own upcall, when we move this somewhere better.
112     mount_client --timeout=${TIMEOUT} \
113         --lustre_upcall=$UPCALL
114 }
115
116 cleanup() {
117     do_mds "echo 0 > /proc/sys/lustre/fail_loc"
118     unmount_client $@ || exit 97
119     shutdown_mds $@ || exit 98
120     shutdown_ost $@ || exit 99
121 }
122
123 replay() {
124     do_mds "sync"
125     do_mds 'echo -e "device \$mds1\\nprobe\\nnotransno\\nreadonly" | lctl'
126     do_client "$1" &
127     shutdown_mds -f
128     start_mds
129     wait
130     do_client "df -h $MOUNTPT" # trigger failover, if we haven't already
131 }
132
133 if [ ! -z "$ONLY" ]; then
134     eval "$ONLY"
135     exit $?
136 fi
137
138 make_config
139
140 REFORMAT=--reformat $SETUP
141 unset REFORMAT
142
143 drop_request "mcreate /mnt/lustre/1"
144 drop_reply "mcreate /mnt/lustre/2"
145 # replay "mcreate /mnt/lustre/3"
146
147 drop_request "tchmod 111 /mnt/lustre/2"
148 drop_reply "tchmod 666 /mnt/lustre/2"
149 # replay "tchmod 444 /mnt/lustre/2"
150
151 drop_request "statone /mnt/lustre/2"
152 drop_reply "statone /mnt/lustre/2"
153 # replay "statone /mnt/lustre/2"
154
155 do_client "cp /etc/resolv.conf /mnt/lustre/resolv.conf"
156 drop_request "cat /mnt/lustre/resolv.conf > /dev/null"
157 drop_reply "cat /mnt/lustre/resolv.conf > /dev/null"
158
159 drop_request "mv /mnt/lustre/resolv.conf /mnt/lustre/renamed"
160 drop_reply "mv /mnt/lustre/renamed /mnt/lustre/renamed-again"
161
162 drop_request "mlink /mnt/lustre/renamed-again /mnt/lustre/link1"
163 drop_reply "mlink /mnt/lustre/renamed-again /mnt/lustre/link2"
164
165 drop_request "munlink /mnt/lustre/link1"
166 drop_reply "munlink /mnt/lustre/link2"
167
168 #bug 1423
169 drop_reply "touch /mnt/lustre/renamed"
170
171 $CLEANUP