8 mkdir -p merge_diff_test
11 function expect_false()
13 if "$@"; then return 1; else return 0; fi
18 fusermount -u mnt || true
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
31 echo Starting test $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
36 rbd create $gen --size 100 --object-size $1 --image-format $4
38 rbd create $out --size 1 --object-size 524288
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
46 dd if=/dev/urandom of=mnt/gen bs=1M conv=notrunc seek=$1 count=$2
51 rbd snap create $gen@$1
56 rbd resize --no-progress $gen --size $1 --allow-shrink
59 function export_diff()
61 if [ $2 == "head" ]; then
66 if [ $1 == "null" ]; then
67 rbd export-diff --no-progress $target diffs/$1.$2
69 rbd export-diff --no-progress $target --from-snap $1 diffs/$1.$2
75 rbd merge-diff diffs/$1.$2 diffs/$2.$3 diffs/$1.$3
80 rbd import-diff --no-progress diffs/$1.$2 $out || return -1
81 if [ "$2" == "head" ]; then
82 sum1=`rbd export $gen - | md5sum`
84 sum1=`rbd export $gen@$2 - | md5sum`
86 sum2=`rbd export $out - | md5sum`
87 if [ "$sum1" != "$sum2" ]; then
90 if [ "$2" != "head" ]; then
91 rbd snap ls $out | awk '{print $2}' | grep "^$2\$" || return -1
96 rebuild 4194304 4194304 1 2
102 merge_diff null a head
105 rebuild 4194304 4194304 1 2
117 rebuild 4194304 4194304 1 2
130 rebuild 4194304 4194304 1 2
139 rbd merge-diff diffs/null.a diffs/a.b - | rbd merge-diff - diffs/b.head - > diffs/null.head
143 rebuild 4194304 4194304 1 2
149 export_diff null s101
150 export_diff s101 s102
151 merge_diff null s101 s102
154 rebuild 4194304 4194304 1 2
162 export_diff null s201
163 export_diff s201 s202
164 merge_diff null s201 s202
167 rebuild 4194304 4194304 1 2
175 export_diff null s301
176 export_diff s301 s302
177 merge_diff null s301 s302
180 rebuild 4194304 4194304 1 2
190 export_diff null s401
191 export_diff s401 s402
192 merge_diff null s401 s402
195 rebuild 4194304 4194304 1 2
205 export_diff null s501
206 export_diff s501 s502
207 merge_diff null s501 s502
210 rebuild 4194304 4194304 1 2
223 merge_diff null r1 r2
224 merge_diff null r2 r3
227 rebuild 4194304 4194304 1 2
243 merge_diff null r1 r2
244 merge_diff null r2 r3
245 merge_diff null r3 r4
248 # merge diff doesn't yet support fancy striping
249 # rebuild 4194304 65536 8 2
254 # export_diff null r1
256 # expect_false merge_diff null r1 r2
258 rebuild 4194304 4194304 1 2
270 merge_diff null s1 s2
273 rebuild 4194304 4194304 1 2
285 merge_diff null s1 s2
288 rebuild 4194304 4194304 1 2
299 merge_diff null s1 s2
302 rebuild 4194304 4194304 1 2
313 merge_diff null s1 s2
316 rebuild 4194304 4194304 1 2
327 merge_diff null s1 s2
330 rebuild 4194304 4194304 1 2
341 merge_diff null s1 s2
344 rebuild 4194304 4194304 1 2
355 merge_diff null s1 s2
358 rebuild 4194304 4194304 1 2
369 merge_diff null s1 s2
372 rebuild 4194304 4194304 1 2
383 merge_diff null s1 s2
386 rebuild 4194304 4194304 1 2
397 merge_diff null s1 s2
400 rebuild 4194304 4194304 1 2
411 merge_diff null s1 s2
414 rebuild 4194304 4194304 1 2
425 merge_diff null s1 s2
428 rebuild 4194304 4194304 1 2
439 merge_diff null s1 s2
442 rebuild 4194304 4194304 1 2
450 merge_diff null s1 s2
453 rebuild 4194304 4194304 1 2
472 rm -rf merge_diff_test