]> git.proxmox.com Git - ceph.git/blame - ceph/qa/standalone/misc/ok-to-stop.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / qa / standalone / misc / ok-to-stop.sh
CommitLineData
11fdf7f2
TL
1#!/usr/bin/env bash
2
3source $CEPH_ROOT/qa/standalone/ceph-helpers.sh
4
5function run() {
6 local dir=$1
7 shift
8
9 export CEPH_MON_A="127.0.0.1:7150" # git grep '\<7150\>' : there must be only one
10 export CEPH_MON_B="127.0.0.1:7151" # git grep '\<7151\>' : there must be only one
11 export CEPH_MON_C="127.0.0.1:7152" # git grep '\<7152\>' : there must be only one
12 export CEPH_MON_D="127.0.0.1:7153" # git grep '\<7153\>' : there must be only one
13 export CEPH_MON_E="127.0.0.1:7154" # git grep '\<7154\>' : there must be only one
14 export CEPH_ARGS
15 CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none "
16 export ORIG_CEPH_ARGS="$CEPH_ARGS"
17
18 local funcs=${@:-$(set | ${SED} -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
19 for func in $funcs ; do
20 setup $dir || return 1
21 $func $dir || return 1
22 kill_daemons $dir KILL || return 1
23 teardown $dir || return 1
24 done
25}
26
27function TEST_1_mon_checks() {
28 local dir=$1
29
30 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A "
31
32 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
33
34 ceph mon ok-to-stop dne || return 1
35 ! ceph mon ok-to-stop a || return 1
36
37 ! ceph mon ok-to-add-offline || return 1
38
39 ! ceph mon ok-to-rm a || return 1
40 ceph mon ok-to-rm dne || return 1
41}
42
43function TEST_2_mons_checks() {
44 local dir=$1
45
46 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B "
47
48 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
49 run_mon $dir b --public-addr=$CEPH_MON_B || return 1
50
51 ceph mon ok-to-stop dne || return 1
52 ! ceph mon ok-to-stop a || return 1
53 ! ceph mon ok-to-stop b || return 1
54 ! ceph mon ok-to-stop a b || return 1
55
56 ceph mon ok-to-add-offline || return 1
57
58 ceph mon ok-to-rm a || return 1
59 ceph mon ok-to-rm b || return 1
60 ceph mon ok-to-rm dne || return 1
61}
62
63function TEST_3_mons_checks() {
64 local dir=$1
65
66 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C "
67
68 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
69 run_mon $dir b --public-addr=$CEPH_MON_B || return 1
70 run_mon $dir c --public-addr=$CEPH_MON_C || return 1
71 wait_for_quorum 60 3
72
73 ceph mon ok-to-stop dne || return 1
74 ceph mon ok-to-stop a || return 1
75 ceph mon ok-to-stop b || return 1
76 ceph mon ok-to-stop c || return 1
77 ! ceph mon ok-to-stop a b || return 1
78 ! ceph mon ok-to-stop b c || return 1
79 ! ceph mon ok-to-stop a b c || return 1
80
81 ceph mon ok-to-add-offline || return 1
82
83 ceph mon ok-to-rm a || return 1
84 ceph mon ok-to-rm b || return 1
85 ceph mon ok-to-rm c || return 1
86
87 kill_daemons $dir KILL mon.b
88 wait_for_quorum 60 2
89
90 ! ceph mon ok-to-stop a || return 1
91 ceph mon ok-to-stop b || return 1
92 ! ceph mon ok-to-stop c || return 1
93
94 ! ceph mon ok-to-add-offline || return 1
95
96 ! ceph mon ok-to-rm a || return 1
97 ceph mon ok-to-rm b || return 1
98 ! ceph mon ok-to-rm c || return 1
99}
100
101function TEST_4_mons_checks() {
102 local dir=$1
103
104 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C,$CEPH_MON_D "
105
106 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
107 run_mon $dir b --public-addr=$CEPH_MON_B || return 1
108 run_mon $dir c --public-addr=$CEPH_MON_C || return 1
109 run_mon $dir d --public-addr=$CEPH_MON_D || return 1
110 wait_for_quorum 60 4
111
112 ceph mon ok-to-stop dne || return 1
113 ceph mon ok-to-stop a || return 1
114 ceph mon ok-to-stop b || return 1
115 ceph mon ok-to-stop c || return 1
116 ceph mon ok-to-stop d || return 1
117 ! ceph mon ok-to-stop a b || return 1
118 ! ceph mon ok-to-stop c d || return 1
119
120 ceph mon ok-to-add-offline || return 1
121
122 ceph mon ok-to-rm a || return 1
123 ceph mon ok-to-rm b || return 1
124 ceph mon ok-to-rm c || return 1
125
126 kill_daemons $dir KILL mon.a
127 wait_for_quorum 60 3
128
129 ceph mon ok-to-stop a || return 1
130 ! ceph mon ok-to-stop b || return 1
131 ! ceph mon ok-to-stop c || return 1
132 ! ceph mon ok-to-stop d || return 1
133
134 ceph mon ok-to-add-offline || return 1
135
136 ceph mon ok-to-rm a || return 1
137 ceph mon ok-to-rm b || return 1
138 ceph mon ok-to-rm c || return 1
139 ceph mon ok-to-rm d || return 1
140}
141
142function TEST_5_mons_checks() {
143 local dir=$1
144
145 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C,$CEPH_MON_D,$CEPH_MON_E "
146
147 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
148 run_mon $dir b --public-addr=$CEPH_MON_B || return 1
149 run_mon $dir c --public-addr=$CEPH_MON_C || return 1
150 run_mon $dir d --public-addr=$CEPH_MON_D || return 1
151 run_mon $dir e --public-addr=$CEPH_MON_E || return 1
152 wait_for_quorum 60 5
153
154 ceph mon ok-to-stop dne || return 1
155 ceph mon ok-to-stop a || return 1
156 ceph mon ok-to-stop b || return 1
157 ceph mon ok-to-stop c || return 1
158 ceph mon ok-to-stop d || return 1
159 ceph mon ok-to-stop e || return 1
160 ceph mon ok-to-stop a b || return 1
161 ceph mon ok-to-stop c d || return 1
162 ! ceph mon ok-to-stop a b c || return 1
163
164 ceph mon ok-to-add-offline || return 1
165
166 ceph mon ok-to-rm a || return 1
167 ceph mon ok-to-rm b || return 1
168 ceph mon ok-to-rm c || return 1
169 ceph mon ok-to-rm d || return 1
170 ceph mon ok-to-rm e || return 1
171
172 kill_daemons $dir KILL mon.a
173 wait_for_quorum 60 4
174
175 ceph mon ok-to-stop a || return 1
176 ceph mon ok-to-stop b || return 1
177 ceph mon ok-to-stop c || return 1
178 ceph mon ok-to-stop d || return 1
179 ceph mon ok-to-stop e || return 1
180
181 ceph mon ok-to-add-offline || return 1
182
183 ceph mon ok-to-rm a || return 1
184 ceph mon ok-to-rm b || return 1
185 ceph mon ok-to-rm c || return 1
186 ceph mon ok-to-rm d || return 1
187 ceph mon ok-to-rm e || return 1
188
189 kill_daemons $dir KILL mon.e
190 wait_for_quorum 60 3
191
192 ceph mon ok-to-stop a || return 1
193 ! ceph mon ok-to-stop b || return 1
194 ! ceph mon ok-to-stop c || return 1
195 ! ceph mon ok-to-stop d || return 1
196 ceph mon ok-to-stop e || return 1
197
198 ! ceph mon ok-to-add-offline || return 1
199
200 ceph mon ok-to-rm a || return 1
201 ! ceph mon ok-to-rm b || return 1
202 ! ceph mon ok-to-rm c || return 1
203 ! ceph mon ok-to-rm d || return 1
204 ceph mon ok-to-rm e || return 1
205}
206
207function TEST_0_mds() {
208 local dir=$1
209
210 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A "
211
212 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
213 run_mgr $dir x || return 1
214 run_osd $dir 0 || return 1
215 run_mds $dir a || return 1
216
217 ceph osd pool create meta 1 || return 1
218 ceph osd pool create data 1 || return 1
219 ceph fs new myfs meta data || return 1
220 sleep 5
221
222 ! ceph mds ok-to-stop a || return 1
223 ! ceph mds ok-to-stop a dne || return 1
224 ceph mds ok-to-stop dne || return 1
225
226 run_mds $dir b || return 1
227 sleep 5
228
229 ceph mds ok-to-stop a || return 1
230 ceph mds ok-to-stop b || return 1
231 ! ceph mds ok-to-stop a b || return 1
232 ceph mds ok-to-stop a dne1 dne2 || return 1
233 ceph mds ok-to-stop b dne || return 1
234 ! ceph mds ok-to-stop a b dne || return 1
235 ceph mds ok-to-stop dne1 dne2 || return 1
236
237 kill_daemons $dir KILL mds.a
238}
239
92f5a8d4
TL
240function TEST_0_osd() {
241 local dir=$1
242
243 CEPH_ARGS="$ORIG_CEPH_ARGS --mon-host=$CEPH_MON_A "
244
245 run_mon $dir a --public-addr=$CEPH_MON_A || return 1
246 run_mgr $dir x || return 1
247 run_osd $dir 0 || return 1
248 run_osd $dir 1 || return 1
249 run_osd $dir 2 || return 1
250 run_osd $dir 3 || return 1
251
252 ceph osd erasure-code-profile set ec-profile m=2 k=2 crush-failure-domain=osd || return 1
9f95a23c 253 ceph osd pool create ec erasure ec-profile || return 1
92f5a8d4
TL
254
255 wait_for_clean || return 1
256
257 # with min_size 3, we can stop only 1 osd
258 ceph osd pool set ec min_size 3 || return 1
259 wait_for_clean || return 1
260
261 ceph osd ok-to-stop 0 || return 1
262 ceph osd ok-to-stop 1 || return 1
263 ceph osd ok-to-stop 2 || return 1
264 ceph osd ok-to-stop 3 || return 1
265 ! ceph osd ok-to-stop 0 1 || return 1
266 ! ceph osd ok-to-stop 2 3 || return 1
267
268 # with min_size 2 we can stop 1 osds
269 ceph osd pool set ec min_size 2 || return 1
270 wait_for_clean || return 1
271
272 ceph osd ok-to-stop 0 1 || return 1
273 ceph osd ok-to-stop 2 3 || return 1
274 ! ceph osd ok-to-stop 0 1 2 || return 1
275 ! ceph osd ok-to-stop 1 2 3 || return 1
276
277 # we should get the same result with one of the osds already down
278 kill_daemons $dir TERM osd.0 || return 1
279 ceph osd down 0 || return 1
280 wait_for_peered || return 1
281
282 ceph osd ok-to-stop 0 || return 1
283 ceph osd ok-to-stop 0 1 || return 1
284 ! ceph osd ok-to-stop 0 1 2 || return 1
285 ! ceph osd ok-to-stop 1 2 3 || return 1
286}
287
11fdf7f2
TL
288
289main ok-to-stop "$@"