Whamcloud - gitweb
b=2432,2494
[fs/lustre-release.git] / lustre / tests / recovery-small.sh
1 #!/bin/sh
2
3 set -e
4
5 LUSTRE=${LUSTRE:-`dirname $0`/..}
6 UPCALL=${UPCALL:-$PWD/recovery-small-upcall.sh}
7 . $LUSTRE/tests/test-framework.sh
8
9 init_test_env $@
10
11 . ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
12
13 build_test_filter
14
15
16 # Allow us to override the setup if we already have a mounted system by
17 # setting SETUP=" " and CLEANUP=" "
18 SETUP=${SETUP:-"setup"}
19 CLEANUP=${CLEANUP:-"cleanup"}
20
21
22 make_config() {
23     rm -f $XMLCONFIG
24     add_mds mds --dev $MDSDEV --size $MDSSIZE
25     add_lov lov1 mds --stripe_sz $STRIPE_BYTES\
26         --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
27     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
28     add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
29     add_client client mds --lov lov1 --path $MOUNT
30 }
31
32 setup() {
33     make_config
34     start ost --reformat $OSTLCONFARGS 
35     start ost2 --reformat $OSTLCONFARGS 
36     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
37     start mds $MDSLCONFARGS --reformat
38     zconf_mount $MOUNT
39 }
40
41 cleanup() {
42     zconf_umount $MOUNT
43     stop mds ${FORCE} $MDSLCONFARGS
44     stop ost2 ${FORCE} --dump cleanup.log
45     stop ost ${FORCE} --dump cleanup.log
46 }
47
48 replay() {
49     do_mds "sync"
50     do_mds 'echo -e "device \$mds1\\nprobe\\nnotransno\\nreadonly" | lctl'
51     do_client "$1" &
52     shutdown_mds -f
53     start_mds
54     wait
55     do_client "df -h $MOUNT" # trigger failover, if we haven't already
56 }
57
58 if [ ! -z "$EVAL" ]; then
59     eval "$EVAL"
60     exit $?
61 fi
62
63 REFORMAT=--reformat $SETUP
64 unset REFORMAT
65
66 test_1() {
67     drop_request "mcreate $MOUNT/1"  || return 1
68     drop_reply "mcreate $MOUNT/2"    || return 2
69 }
70 run_test 1 "mcreate: drop req, drop rep"
71
72 test_2() {
73     drop_request "tchmod 111 $MOUNT/2"  || return 1
74     drop_reply "tchmod 666 $MOUNT/2"    || return 2
75 }
76 run_test 2 "chmod: drop req, drop rep"
77
78 test_3() {
79     drop_request "statone $MOUNT/2" || return 1
80     drop_reply "statone $MOUNT/2"   || return 2
81 }
82 run_test 3 "stat: drop req, drop rep"
83
84 test_4() {
85     do_facet client "cp /etc/resolv.conf $MOUNT/resolv.conf" || return 1
86     drop_request "cat $MOUNT/resolv.conf > /dev/null"   || return 2
87     drop_reply "cat $MOUNT/resolv.conf > /dev/null"     || return 3
88 }
89 run_test 4 "open: drop req, drop rep"
90
91 test_5() {
92     drop_request "mv $MOUNT/resolv.conf $MOUNT/renamed" || return 1
93     drop_reply "mv $MOUNT/renamed $MOUNT/renamed-again" || return 2
94 }
95 run_test 5 "rename: drop req, drop rep"
96
97 test_6() {
98     drop_request "mlink $MOUNT/renamed-again $MOUNT/link1" || return 1
99     drop_reply "mlink $MOUNT/renamed-again $MOUNT/link2"   || return 2
100 }
101 run_test 6 "link: drop req, drop rep"
102
103 test_7() {
104     drop_request "munlink $MOUNT/link1"   || return 1
105     drop_reply "munlink $MOUNT/link2"     || return 2
106 }
107 run_test 7 "unlink: drop req, drop rep"
108
109
110 #bug 1423
111 test_8() {
112     drop_reply "touch $MOUNT/renamed"    || return 1
113 }
114 run_test 8 "touch: drop rep (bug 1423)"
115
116
117 #bug 1420
118 test_9() {
119     pause_bulk "cp /etc/profile $MOUNT"       || return 1
120     do_facet client "cp /etc/termcap $MOUNT"  || return 2
121     do_facet client "sync"
122     do_facet client "rm $MOUNT/termcap $MOUNT/profile" || return 3
123 }
124 run_test 9 "pause bulk on OST (bug 1420)"
125
126 #bug 1521
127 test_10() {
128     do_facet client mcreate $MOUNT/f10        || return 1
129     drop_bl_callback "chmod 0777 $MOUNT/f10"  || return 2
130     # wait for the mds to evict the client
131     #echo "sleep $(($TIMEOUT*2))"
132     #sleep $(($TIMEOUT*2))
133     do_facet client touch  $MOUNT/f10 || echo "touch failed, evicted"
134     do_facet client checkstat -v -p 0777 $MOUNT/f10  || return 3
135     do_facet client "munlink $MOUNT/f10"
136 }
137 run_test 10 "finish request on server after client eviction (bug 1521)"
138
139 #bug 2460
140 # wake up a thead waiting for completion after eviction
141 test_11(){
142     do_facet client multiop $MOUNT/$tfile Ow  || return 1
143     do_facet client multiop $MOUNT/$tfile or  || return 2
144
145     cancel_lru_locks OSC
146
147     do_facet client multiop $MOUNT/$tfile or  || return 3
148     drop_bl_callback multiop $MOUNT/$tfile Ow  || 
149         echo "client evicted, as expected"
150
151     do_facet client munlink $MOUNT/$tfile  || return 4
152 }
153 run_test 11 "wake up a thead waiting for completion after eviction (b=2460)"
154
155 clear_failloc() {
156     facet=$1
157     pause=$2
158     sleep $pause
159     echo "clearing fail_loc on $facet"
160     do_facet $facet "sysctl -w lustre.fail_loc=0"
161 }
162
163 #b=2494
164 test_12(){
165     $LCTL mark multiop $MOUNT/$tfile OS_c 
166     multiop $MOUNT/$tfile OS_c  &
167     PID=$!
168 #define OBD_FAIL_MDS_CLOSE_NET           0x115
169     DDPID=$!
170     do_facet mds "sysctl -w lustre.fail_loc=0x115"
171     clear_failloc mds $((TIMEOUT * 2)) &
172     kill -USR1 $PID
173     echo "waiting for multiop $PID"
174     wait $PID || return 2
175     do_facet client munlink $MOUNT/$tfile  || return 3
176 }
177 run_test 12 "recover from timed out resend in ptlrpcd (b=2494)"
178
179 $CLEANUP
180