Whamcloud - gitweb
b=3983
[fs/lustre-release.git] / lustre / tests / replay-single-lmv.sh
1 #!/bin/sh
2
3 set -e
4
5 #
6 # This test needs to be run on the client
7 #
8
9 LUSTRE=${LUSTRE:-`dirname $0`/..}
10 . $LUSTRE/tests/test-framework.sh
11
12 init_test_env $@
13
14 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
15
16 # Skip these tests
17 ALWAYS_EXCEPT=""
18
19
20 gen_config() {
21     rm -f $XMLCONFIG
22
23     if [ "$MDSCOUNT" -gt 1 ]; then
24         add_lmv lmv1
25         for num in `seq $MDSCOUNT`; do
26             MDSDEV=$TMP/mds${num}-`hostname`
27             add_mds mds$num --dev $MDSDEV --size $MDSSIZE --lmv lmv1
28         done
29         add_lov_to_lmv lov1 lmv1 --stripe_sz $STRIPE_BYTES \
30             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
31         add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
32         add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
33         add_client client --lmv lmv1 --lov lov1 --path $MOUNT
34     else
35         add_mds mds1 --dev $MDSDEV --size $MDSSIZE
36         if [ ! -z "$mdsfailover_HOST" ]; then
37              add_mdsfailover mds --dev $MDSDEV --size $MDSSIZE
38         fi
39
40         add_lov lov1 mds1 --stripe_sz $STRIPE_BYTES \
41             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
42         add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
43         add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
44         add_client client --mds mds1_svc --lov lov1 --path $MOUNT
45     fi
46 }
47
48 build_test_filter
49
50 cleanup() {
51     # make sure we are using the primary MDS, so the config log will
52     # be able to clean up properly.
53     activemds=`facet_active mds`
54     if [ $activemds != "mds" ]; then
55         fail mds
56     fi
57     zconf_umount `hostname` $MOUNT
58     if [ "$MDSCOUNT" -gt 1 ]; then
59         for num in `seq $MDSCOUNT`; do
60             stop mds$num ${FORCE} $MDSLCONFARGS
61         done
62     else
63         stop mds ${FORCE} $MDSLCONFARGS
64     fi
65     stop ost2 ${FORCE} --dump cleanup.log
66     stop ost ${FORCE} --dump cleanup.log
67 }
68
69 if [ "$ONLY" == "cleanup" ]; then
70     sysctl -w portals.debug=0 || true
71     cleanup
72     exit
73 fi
74
75 SETUP=${SETUP:-"setup"}
76 CLEANUP=${CLEANUP:-"cleanup"}
77
78 setup() {
79     gen_config
80
81     start ost --reformat $OSTLCONFARGS 
82     start ost2 --reformat $OSTLCONFARGS 
83     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
84     start mds1 $MDSLCONFARGS --reformat
85     start mds2 $MDSLCONFARGS --reformat
86     start mds3 $MDSLCONFARGS --reformat
87     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
88 }
89
90 $SETUP
91
92 if [ "$ONLY" == "setup" ]; then
93     exit 0
94 fi
95
96 mkdir -p $DIR
97
98 test_0() {
99     replay_barrier mds1
100     fail mds1
101 }
102 run_test 0 "empty replay"
103
104 test_0b() {
105     # this test attempts to trigger a race in the precreation code, 
106     # and must run before any other objects are created on the filesystem
107     fail ost
108     createmany -o $DIR/$tfile 20 || return 1
109     unlinkmany $DIR/$tfile 20 || return 2
110 }
111 run_test 0b "ensure object created after recover exists. (3284)"
112
113 test_1a() {
114     mkdir $DIR/dir01
115     replay_barrier mds2
116     $CHECKSTAT -t dir $DIR/dir01 || return 1
117     rmdir $DIR/dir01
118     fail mds2
119     stat $DIR/dir01
120 }
121 run_test 1a "unlink cross-node dir (fail mds with inode)"
122
123 test_1b() {
124     mkdir $DIR/dir11
125     replay_barrier mds1
126     $CHECKSTAT -t dir $DIR/dir11 || return 1
127     rmdir $DIR/dir11
128     fail mds1
129     stat $DIR/dir11
130 }
131 run_test 1b "unlink cross-node dir (fail mds with name)"
132
133 test_2a() {
134     mkdir $DIR/dir21
135     createmany -o $DIR/dir21/f 3000
136     sleep 10
137     $CHECKSTAT -t dir $DIR/dir21 || return 1
138     $CHECKSTAT -t file $DIR/dir21/f1002 || return 1
139     replay_barrier mds1
140     rm $DIR/dir21/f1002
141     fail mds1
142     stat $DIR/dir21/f1002
143 }
144 run_test 2a "unlink cross-node file (fail mds with name)"
145
146
147 test_3a() {
148     replay_barrier mds2
149     mkdir $DIR/dir3a1
150     $LCTL mark "FAILOVER mds2"
151     fail mds2
152     stat $DIR
153     $CHECKSTAT -t dir $DIR/dir3a1 || return 1
154 }
155 run_test 3a "mkdir cross-node dir (fail mds with inode)"
156
157 test_3b() {
158     mkdir $DIR/dir13
159     replay_barrier mds1
160     $CHECKSTAT -t dir $DIR/dir13 || return 1
161     rmdir $DIR/dir13
162     fail mds1
163     stat $DIR/dir13
164 }
165 run_test 3b "mkdir cross-node dir (fail mds with name)"
166
167 equals_msg test complete, cleaning up
168 $CLEANUP
169