]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/rbd/rbd_mirror_ha.sh
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / qa / workunits / rbd / rbd_mirror_ha.sh
CommitLineData
7c673cae
FG
1#!/bin/sh
2#
3# rbd_mirror_ha.sh - test rbd-mirror daemons in HA mode
4#
5
6. $(dirname $0)/rbd_mirror_helpers.sh
7
8is_leader()
9{
10 local instance=$1
11 local pool=$2
12
13 test -n "${pool}" || pool=${POOL}
14
15 admin_daemon "${CLUSTER1}:${instance}" \
16 rbd mirror status ${pool} ${CLUSTER2} |
17 grep '"leader": true'
18}
19
20wait_for_leader()
21{
22 local s instance
23
24 for s in 1 1 2 4 4 4 4 4 8 8 8 8 16 16 32 64; do
25 sleep $s
26 for instance in `seq 0 9`; do
27 is_leader ${instance} || continue
28 LEADER=${instance}
29 return 0
30 done
31 done
32
33 LEADER=
34 return 1
35}
36
37release_leader()
38{
39 local pool=$1
40 local cmd="rbd mirror leader release"
41
42 test -n "${pool}" && cmd="${cmd} ${pool} ${CLUSTER2}"
43
44 admin_daemon "${CLUSTER1}:${LEADER}" ${cmd}
45}
46
47wait_for_leader_released()
48{
49 local i
50
51 test -n "${LEADER}"
52 for i in `seq 10`; do
53 is_leader ${LEADER} || return 0
54 sleep 1
55 done
56
57 return 1
58}
59
60test_replay()
61{
62 local image
63
64 for image; do
65 wait_for_image_replay_started ${CLUSTER1}:${LEADER} ${POOL} ${image}
66 write_image ${CLUSTER2} ${POOL} ${image} 100
67 wait_for_replay_complete ${CLUSTER1}:${LEADER} ${CLUSTER2} ${POOL} \
68 ${image}
69 wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+replaying' \
70 'master_position'
71 if [ -z "${RBD_MIRROR_USE_RBD_MIRROR}" ]; then
72 wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} \
73 'down+unknown'
74 fi
75 compare_images ${POOL} ${image}
76 done
77}
78
79testlog "TEST: start first daemon instance and test replay"
80start_mirror ${CLUSTER1}:0
81image1=test1
82create_image ${CLUSTER2} ${POOL} ${image1}
83LEADER=0
84test_replay ${image1}
85
86testlog "TEST: release leader and wait it is reacquired"
87is_leader 0 ${POOL}
88is_leader 0 ${PARENT_POOL}
89release_leader ${POOL}
90wait_for_leader_released
91is_leader 0 ${PARENT_POOL}
92wait_for_leader
93release_leader
94wait_for_leader_released
95expect_failure "" is_leader 0 ${PARENT_POOL}
96wait_for_leader
97
98testlog "TEST: start second daemon instance and test replay"
99start_mirror ${CLUSTER1}:1
100image2=test2
101create_image ${CLUSTER2} ${POOL} ${image2}
102test_replay ${image1} ${image2}
103
104testlog "TEST: release leader and test it is acquired by secondary"
105is_leader 0 ${POOL}
106is_leader 0 ${PARENT_POOL}
107release_leader ${POOL}
108wait_for_leader_released
109wait_for_leader
110test_replay ${image1} ${image2}
111release_leader
112wait_for_leader_released
113wait_for_leader
114test "${LEADER}" = 0
115
116testlog "TEST: stop first daemon instance and test replay"
117stop_mirror ${CLUSTER1}:0
118image3=test3
119create_image ${CLUSTER2} ${POOL} ${image3}
120LEADER=1
121test_replay ${image1} ${image2} ${image3}
122
123testlog "TEST: start first daemon instance and test replay"
124start_mirror ${CLUSTER1}:0
125image4=test4
126create_image ${CLUSTER2} ${POOL} ${image4}
127test_replay ${image3} ${image4}
128
129testlog "TEST: crash leader and test replay"
130stop_mirror ${CLUSTER1}:1 -KILL
131image5=test5
132create_image ${CLUSTER2} ${POOL} ${image5}
133LEADER=0
134test_replay ${image1} ${image4} ${image5}
135
136testlog "TEST: start crashed leader and test replay"
137start_mirror ${CLUSTER1}:1
138image6=test6
139create_image ${CLUSTER2} ${POOL} ${image6}
140test_replay ${image1} ${image6}
141
142testlog "TEST: start yet another daemon instance and test replay"
143start_mirror ${CLUSTER1}:2
144image7=test7
145create_image ${CLUSTER2} ${POOL} ${image7}
146test_replay ${image1} ${image7}
147
148testlog "TEST: release leader and test it is acquired by secondary"
149is_leader 0
150release_leader
151wait_for_leader_released
152wait_for_leader
153test_replay ${image1} ${image2}
154
155testlog "TEST: stop leader and test replay"
156stop_mirror ${CLUSTER1}:${LEADER}
157image8=test8
158create_image ${CLUSTER2} ${POOL} ${image8}
159prev_leader=${LEADER}
160wait_for_leader
161test_replay ${image1} ${image8}
162
163testlog "TEST: start previous leader and test replay"
164start_mirror ${CLUSTER1}:${prev_leader}
165image9=test9
166create_image ${CLUSTER2} ${POOL} ${image9}
167test_replay ${image1} ${image9}
168
169testlog "TEST: crash leader and test replay"
170stop_mirror ${CLUSTER1}:${LEADER} -KILL
171image10=test10
172create_image ${CLUSTER2} ${POOL} ${image10}
173prev_leader=${LEADER}
174wait_for_leader
175test_replay ${image1} ${image10}
176
177testlog "TEST: start previous leader and test replay"
178start_mirror ${CLUSTER1}:${prev_leader}
179image11=test11
180create_image ${CLUSTER2} ${POOL} ${image11}
181test_replay ${image1} ${image11}
182
183testlog "TEST: start some more daemon instances and test replay"
184start_mirror ${CLUSTER1}:3
185start_mirror ${CLUSTER1}:4
186start_mirror ${CLUSTER1}:5
187start_mirror ${CLUSTER1}:6
188image13=test13
189create_image ${CLUSTER2} ${POOL} ${image13}
190test_replay ${leader} ${image1} ${image13}
191
192testlog "TEST: release leader and test it is acquired by secondary"
193release_leader
194wait_for_leader_released
195wait_for_leader
196test_replay ${image1} ${image2}
197
198testlog "TEST: in loop: stop leader and test replay"
199for i in 0 1 2 3 4 5; do
200 stop_mirror ${CLUSTER1}:${LEADER}
201 wait_for_leader
202 test_replay ${image1}
203done
204
205stop_mirror ${CLUSTER1}:${LEADER}
206
207echo OK