Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / workunits / rbd / merge_diff.sh
1 #!/bin/bash -ex
2
3 pool=rbd
4 gen=$pool/gen
5 out=$pool/out
6 testno=1
7
8 mkdir -p merge_diff_test
9 pushd merge_diff_test
10
11 function expect_false()
12 {
13   if "$@"; then return 1; else return 0; fi
14 }
15
16 function clear_all()
17 {
18   fusermount -u mnt || true
19
20   rbd snap purge --no-progress $gen || true
21   rbd rm --no-progress $gen || true
22   rbd snap purge --no-progress $out || true
23   rbd rm --no-progress $out || true
24
25   rm -rf diffs || true
26 }
27
28 function rebuild()
29 {
30   clear_all
31   echo Starting test $testno
32   ((testno++))
33   if [[ "$2" -lt "$1" ]] && [[ "$3" -gt "1" ]]; then
34     rbd create $gen --size 100 --object-size $1 --stripe-unit $2 --stripe-count $3 --image-format $4
35   else
36     rbd create $gen --size 100 --object-size $1 --image-format $4
37   fi
38   rbd create $out --size 1 --object-size 524288
39   mkdir -p mnt diffs
40   # lttng has atexit handlers that need to be fork/clone aware
41   LD_PRELOAD=liblttng-ust-fork.so.0 rbd-fuse -p $pool mnt
42 }
43
44 function write()
45 {
46   dd if=/dev/urandom of=mnt/gen bs=1M conv=notrunc seek=$1 count=$2
47 }
48
49 function snap()
50 {
51   rbd snap create $gen@$1
52 }
53
54 function resize()
55 {
56   rbd resize --no-progress $gen --size $1 --allow-shrink
57 }
58
59 function export_diff()
60 {
61   if [ $2 == "head" ]; then
62     target="$gen"
63   else
64     target="$gen@$2"
65   fi
66   if [ $1 == "null" ]; then
67     rbd export-diff --no-progress $target diffs/$1.$2
68   else
69     rbd export-diff --no-progress $target --from-snap $1 diffs/$1.$2
70   fi
71 }
72
73 function merge_diff()
74 {
75   rbd merge-diff diffs/$1.$2 diffs/$2.$3 diffs/$1.$3
76 }
77
78 function check()
79 {
80   rbd import-diff --no-progress diffs/$1.$2 $out || return -1
81   if [ "$2" == "head" ]; then
82     sum1=`rbd export $gen - | md5sum`
83   else
84     sum1=`rbd export $gen@$2 - | md5sum`
85   fi
86   sum2=`rbd export $out - | md5sum`
87   if [ "$sum1" != "$sum2" ]; then
88     exit -1
89   fi
90   if [ "$2" != "head" ]; then
91     rbd snap ls $out | awk '{print $2}' | grep "^$2\$" || return -1
92   fi
93 }
94
95 #test f/t header
96 rebuild 4194304 4194304 1 2
97 write 0 1
98 snap a
99 write 1 1
100 export_diff null a
101 export_diff a head
102 merge_diff null a head
103 check null head
104
105 rebuild 4194304 4194304 1 2
106 write 0 1
107 snap a
108 write 1 1
109 snap b
110 write 2 1
111 export_diff null a
112 export_diff a b
113 export_diff b head
114 merge_diff null a b
115 check null b
116
117 rebuild 4194304 4194304 1 2
118 write 0 1
119 snap a
120 write 1 1
121 snap b
122 write 2 1
123 export_diff null a
124 export_diff a b
125 export_diff b head
126 merge_diff a b head
127 check null a
128 check a head
129
130 rebuild 4194304 4194304 1 2
131 write 0 1
132 snap a
133 write 1 1
134 snap b
135 write 2 1
136 export_diff null a
137 export_diff a b
138 export_diff b head
139 rbd merge-diff diffs/null.a diffs/a.b - | rbd merge-diff - diffs/b.head - > diffs/null.head
140 check null head
141
142 #data test
143 rebuild 4194304 4194304 1 2
144 write 4 2
145 snap s101
146 write 0 3
147 write 8 2
148 snap s102
149 export_diff null s101
150 export_diff s101 s102
151 merge_diff null s101 s102
152 check null s102
153
154 rebuild 4194304 4194304 1 2
155 write 0 3
156 write 2 5
157 write 8 2
158 snap s201
159 write 0 2
160 write 6 3
161 snap s202
162 export_diff null s201
163 export_diff s201 s202
164 merge_diff null s201 s202
165 check null s202
166
167 rebuild 4194304 4194304 1 2
168 write 0 4
169 write 12 6
170 snap s301
171 write 0 6
172 write 10 5
173 write 16 4
174 snap s302
175 export_diff null s301
176 export_diff s301 s302
177 merge_diff null s301 s302
178 check null s302
179
180 rebuild 4194304 4194304 1 2
181 write 0 12
182 write 14 2
183 write 18 2
184 snap s401
185 write 1 2
186 write 5 6
187 write 13 3
188 write 18 2
189 snap s402
190 export_diff null s401
191 export_diff s401 s402
192 merge_diff null s401 s402
193 check null s402
194
195 rebuild 4194304 4194304 1 2
196 write 2 4
197 write 10 12
198 write 27 6
199 write 36 4
200 snap s501
201 write 0 24
202 write 28 4
203 write 36 4
204 snap s502
205 export_diff null s501
206 export_diff s501 s502
207 merge_diff null s501 s502
208 check null s502
209
210 rebuild 4194304 4194304 1 2
211 write 0 8
212 resize 5
213 snap r1
214 resize 20
215 write 12 8
216 snap r2
217 resize 8
218 write 4 4
219 snap r3
220 export_diff null r1
221 export_diff r1 r2
222 export_diff r2 r3
223 merge_diff null r1 r2
224 merge_diff null r2 r3
225 check null r3
226
227 rebuild 4194304 4194304 1 2
228 write 0 8
229 resize 5
230 snap r1
231 resize 20
232 write 12 8
233 snap r2
234 resize 8
235 write 4 4
236 snap r3
237 resize 10
238 snap r4
239 export_diff null r1
240 export_diff r1 r2
241 export_diff r2 r3
242 export_diff r3 r4
243 merge_diff null r1 r2
244 merge_diff null r2 r3
245 merge_diff null r3 r4
246 check null r4
247
248 # merge diff doesn't yet support fancy striping
249 # rebuild 4194304 65536 8 2
250 # write 0 32
251 # snap r1
252 # write 16 32
253 # snap r2
254 # export_diff null r1
255 # export_diff r1 r2
256 # expect_false merge_diff null r1 r2
257
258 rebuild 4194304 4194304 1 2
259 write 0 1
260 write 2 1
261 write 4 1
262 write 6 1
263 snap s1
264 write 1 1
265 write 3 1
266 write 5 1
267 snap s2
268 export_diff null s1
269 export_diff s1 s2
270 merge_diff null s1 s2
271 check null s2
272
273 rebuild 4194304 4194304 1 2
274 write 1 1
275 write 3 1
276 write 5 1
277 snap s1
278 write 0 1
279 write 2 1
280 write 4 1
281 write 6 1
282 snap s2
283 export_diff null s1
284 export_diff s1 s2
285 merge_diff null s1 s2
286 check null s2
287
288 rebuild 4194304 4194304 1 2
289 write 0 3
290 write 6 3
291 write 12 3
292 snap s1
293 write 1 1
294 write 7 1
295 write 13 1
296 snap s2
297 export_diff null s1
298 export_diff s1 s2
299 merge_diff null s1 s2
300 check null s2
301
302 rebuild 4194304 4194304 1 2
303 write 0 3
304 write 6 3
305 write 12 3
306 snap s1
307 write 0 1
308 write 6 1
309 write 12 1
310 snap s2
311 export_diff null s1
312 export_diff s1 s2
313 merge_diff null s1 s2
314 check null s2
315
316 rebuild 4194304 4194304 1 2
317 write 0 3
318 write 6 3
319 write 12 3
320 snap s1
321 write 2 1
322 write 8 1
323 write 14 1
324 snap s2
325 export_diff null s1
326 export_diff s1 s2
327 merge_diff null s1 s2
328 check null s2
329
330 rebuild 4194304 4194304 1 2
331 write 1 1
332 write 7 1
333 write 13 1
334 snap s1
335 write 0 3
336 write 6 3
337 write 12 3
338 snap s2
339 export_diff null s1
340 export_diff s1 s2
341 merge_diff null s1 s2
342 check null s2
343
344 rebuild 4194304 4194304 1 2
345 write 0 1
346 write 6 1
347 write 12 1
348 snap s1
349 write 0 3
350 write 6 3
351 write 12 3
352 snap s2
353 export_diff null s1
354 export_diff s1 s2
355 merge_diff null s1 s2
356 check null s2
357
358 rebuild 4194304 4194304 1 2
359 write 2 1
360 write 8 1
361 write 14 1
362 snap s1
363 write 0 3
364 write 6 3
365 write 12 3
366 snap s2
367 export_diff null s1
368 export_diff s1 s2
369 merge_diff null s1 s2
370 check null s2
371
372 rebuild 4194304 4194304 1 2
373 write 0 3
374 write 6 3
375 write 12 3
376 snap s1
377 write 0 3
378 write 6 3
379 write 12 3
380 snap s2
381 export_diff null s1
382 export_diff s1 s2
383 merge_diff null s1 s2
384 check null s2
385
386 rebuild 4194304 4194304 1 2
387 write 2 4
388 write 8 4
389 write 14 4
390 snap s1
391 write 0 3
392 write 6 3
393 write 12 3
394 snap s2
395 export_diff null s1
396 export_diff s1 s2
397 merge_diff null s1 s2
398 check null s2
399
400 rebuild 4194304 4194304 1 2
401 write 0 4
402 write 6 4
403 write 12 4
404 snap s1
405 write 0 3
406 write 6 3
407 write 12 3
408 snap s2
409 export_diff null s1
410 export_diff s1 s2
411 merge_diff null s1 s2
412 check null s2
413
414 rebuild 4194304 4194304 1 2
415 write 0 6
416 write 6 6
417 write 12 6
418 snap s1
419 write 0 3
420 write 6 3
421 write 12 3
422 snap s2
423 export_diff null s1
424 export_diff s1 s2
425 merge_diff null s1 s2
426 check null s2
427
428 rebuild 4194304 4194304 1 2
429 write 3 6
430 write 9 6
431 write 15 6
432 snap s1
433 write 0 3
434 write 6 3
435 write 12 3
436 snap s2
437 export_diff null s1
438 export_diff s1 s2
439 merge_diff null s1 s2
440 check null s2
441
442 rebuild 4194304 4194304 1 2
443 write 0 8
444 snap s1
445 resize 2
446 resize 100
447 snap s2
448 export_diff null s1
449 export_diff s1 s2
450 merge_diff null s1 s2
451 check null s2
452
453 rebuild 4194304 4194304 1 2
454 write 0 8
455 snap s1
456 resize 2
457 resize 100
458 snap s2
459 write 20 2
460 snap s3
461 export_diff null s1
462 export_diff s1 s2
463 export_diff s2 s3
464 merge_diff s1 s2 s3
465 check null s1
466 check s1 s3
467
468 #addme
469
470 clear_all
471 popd
472 rm -rf merge_diff_test
473
474 echo OK