Whamcloud - gitweb
smash the HEAD with the contents of b_cmd. HEAD_PRE_CMD_SMASH and
[fs/lustre-release.git] / lustre / tests / replay-dual.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 gen_config() {
13     rm -f $XMLCONFIG
14     add_mds mds --dev $MDSDEV --size $MDSSIZE
15     if [ ! -z "$mdsfailover_HOST" ]; then
16          add_mdsfailover mds --dev $MDSDEV --size $MDSSIZE
17     fi
18     
19     add_lov lov1 mds --stripe_sz $STRIPE_BYTES\
20         --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
21     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
22     add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
23     add_client client mds --lov lov1 --path $MOUNT
24 }
25
26
27
28 build_test_filter
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     activemds=`facet_active mds`
34     if [ $activemds != "mds" ]; then
35         fail mds
36     fi
37
38     umount $MOUNT2
39     umount $MOUNT
40     rmmod llite
41     stop mds ${FORCE}
42     stop ost2 ${FORCE}
43     stop ost ${FORCE}  --dump cleanup-dual.log
44 }
45
46 if [ "$ONLY" == "cleanup" ]; then
47     sysctl -w portals.debug=0
48     cleanup
49     exit
50 fi
51
52 gen_config
53 start ost --reformat $OSTLCONFARGS 
54 PINGER=`cat /proc/fs/lustre/pinger`
55
56 if [ "$PINGER" != "on" ]; then
57     echo "ERROR: Lustre must be built with --enable-pinger for replay-dual"
58     stop mds
59     exit 1
60 fi
61
62 start ost2 --reformat $OSTLCONFARGS 
63 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
64 start mds $MDSLCONFARGS --reformat
65 zconf_mount `hostname` $MOUNT
66 zconf_mount `hostname` $MOUNT2
67
68 echo $TIMEOUT > /proc/sys/lustre/timeout
69 echo $UPCALL > /proc/sys/lustre/upcall
70
71 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
72
73 test_1() {
74     touch $MOUNT1/a
75     replay_barrier mds
76     touch $MOUNT2/b
77
78     fail mds
79     checkstat $MOUNT2/a || return 1
80     checkstat $MOUNT1/b || return 2
81     rm $MOUNT2/a $MOUNT1/b
82     checkstat $MOUNT1/a && return 3
83     checkstat $MOUNT2/b && return 4
84     return 0
85 }
86
87 run_test 1 "|X| simple create"
88
89
90 test_2() {
91     replay_barrier mds
92     mkdir $MOUNT1/adir
93
94     fail mds
95     checkstat $MOUNT2/adir || return 1
96     rmdir $MOUNT2/adir
97     checkstat $MOUNT2/adir && return 2
98     return 0
99 }
100
101 run_test 2 "|X| mkdir adir"
102
103 test_3() {
104     replay_barrier mds
105     mkdir $MOUNT1/adir
106     mkdir $MOUNT2/adir/bdir
107
108     fail mds
109     checkstat $MOUNT2/adir      || return 1
110     checkstat $MOUNT1/adir/bdir || return 2
111     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
112     checkstat $MOUNT1/adir      && return 3
113     checkstat $MOUNT2/adir/bdir && return 4
114     return 0
115 }
116
117 run_test 3 "|X| mkdir adir, mkdir adir/bdir "
118
119 test_4() {
120     mkdir $MOUNT1/adir
121     replay_barrier mds
122     mkdir $MOUNT1/adir  && return 1
123     mkdir $MOUNT2/adir/bdir
124
125     fail mds
126     checkstat $MOUNT2/adir      || return 2
127     checkstat $MOUNT1/adir/bdir || return 3
128
129     rmdir $MOUNT2/adir/bdir $MOUNT1/adir
130     checkstat $MOUNT1/adir      && return 4
131     checkstat $MOUNT2/adir/bdir && return 5
132     return 0
133 }
134
135 run_test 4 "|X| mkdir adir (-EEXIST), mkdir adir/bdir "
136
137
138 test_5() {
139     # multiclient version of replay_single.sh/test_8
140     mcreate $MOUNT1/a
141     multiop $MOUNT2/a o_tSc &
142     pid=$!
143     # give multiop a chance to open
144     sleep 1 
145     rm -f $MOUNT1/a
146     replay_barrier mds
147     kill -USR1 $pid
148     wait $pid || return 1
149
150     fail mds
151     [ -e $MOUNT2/a ] && return 2
152     return 0
153 }
154 run_test 5 "open, unlink |X| close"
155
156
157 test_6() {
158     mcreate $MOUNT1/a
159     multiop $MOUNT2/a o_c &
160     pid1=$!
161     multiop $MOUNT1/a o_c &
162     pid2=$!
163     # give multiop a chance to open
164     sleep 1 
165     rm -f $MOUNT1/a
166     replay_barrier mds
167     kill -USR1 $pid1
168     wait $pid1 || return 1
169
170     fail mds
171     kill -USR1 $pid2
172     wait $pid2 || return 1
173     [ -e $MOUNT2/a ] && return 2
174     return 0
175 }
176 run_test 6 "open1, open2, unlink |X| close1 [fail mds] close2"
177
178 if [ "$ONLY" != "setup" ]; then
179         equals_msg test complete, cleaning up
180         cleanup
181 fi