4 . $
(dirname $0)/..
/..
/standalone
/ceph-helpers.sh
6 export RBD_FORCE_ALLOW_V1
=1
8 # make sure rbd pool is EMPTY.. this is a test script!!
9 rbd
ls |
wc -l |
grep -v '^0$' && echo "nonempty rbd pool, aborting! run this script on an empty test cluster only." && exit 1
11 IMGS
="testimg1 testimg2 testimg3 testimg4 testimg5 testimg6 testimg-diff1 testimg-diff2 testimg-diff3 foo foo2 bar bar2 test1 test2 test3 test4 clone2"
14 "$@" && return 1 ||
return 0
18 if ceph osd dump |
grep ^pool |
grep "'rbd'" |
grep tier
; then
25 (rbd snap purge
$img || true
) >/dev
/null
2>&1
26 (rbd
rm $img || true
) >/dev
/null
2>&1
31 echo "testing import, export, resize, and snapshots..."
32 TMP_FILES
="/tmp/img1 /tmp/img1.new /tmp/img2 /tmp/img2.new /tmp/img3 /tmp/img3.new /tmp/img-diff1.new /tmp/img-diff2.new /tmp/img-diff3.new /tmp/img1.snap1 /tmp/img1.snap1 /tmp/img-diff1.snap1"
38 dd if=/bin
/sh of
=/tmp
/img1 bs
=1k count
=1 seek
=10
39 dd if=/bin
/dd of
=/tmp
/img1 bs
=1k count
=10 seek
=100
40 dd if=/bin
/rm of
=/tmp
/img1 bs
=1k count
=100 seek
=1000
41 dd if=/bin
/ls of
=/tmp
/img1 bs
=1k seek
=10000
42 dd if=/bin
/ln of
=/tmp
/img1 bs
=1k seek
=100000
45 rbd import
$RBD_CREATE_ARGS /tmp
/img1 testimg1
46 rbd resize testimg1
--size=256 --allow-shrink
47 rbd
export testimg1
/tmp
/img2
48 rbd snap create testimg1
--snap=snap1
49 rbd resize testimg1
--size=128 && exit 1 || true
# shrink should fail
50 rbd resize testimg1
--size=128 --allow-shrink
51 rbd
export testimg1
/tmp
/img3
54 rbd info testimg1 |
grep 'size 128 MiB'
55 rbd info
--snap=snap1 testimg1 |
grep 'size 256 MiB'
58 rm -rf /tmp
/diff-testimg1-1
/tmp
/diff-testimg1-2
59 rbd export-diff testimg1
--snap=snap1
/tmp
/diff-testimg1-1
60 rbd export-diff testimg1
--from-snap=snap1
/tmp
/diff-testimg1-2
63 rbd create
$RBD_CREATE_ARGS --size=1 testimg-diff1
64 rbd import-diff
--sparse-size 8K
/tmp
/diff-testimg1-1 testimg-diff1
65 rbd import-diff
--sparse-size 8K
/tmp
/diff-testimg1-2 testimg-diff1
68 rbd info testimg1 |
grep 'size 128 MiB'
69 rbd info
--snap=snap1 testimg1 |
grep 'size 256 MiB'
70 rbd info testimg-diff1 |
grep 'size 128 MiB'
71 rbd info
--snap=snap1 testimg-diff1 |
grep 'size 256 MiB'
74 rbd copy testimg1
--snap=snap1 testimg2
75 rbd copy testimg1 testimg3
76 rbd copy testimg-diff1
--sparse-size 768K
--snap=snap1 testimg-diff2
77 rbd copy testimg-diff1
--sparse-size 768K testimg-diff3
80 rbd info testimg2 |
grep 'size 256 MiB'
81 rbd info testimg3 |
grep 'size 128 MiB'
82 rbd info testimg-diff2 |
grep 'size 256 MiB'
83 rbd info testimg-diff3 |
grep 'size 128 MiB'
86 rbd deep copy testimg1 testimg4
87 rbd deep copy testimg1
--snap=snap1 testimg5
88 rbd info testimg4 |
grep 'size 128 MiB'
89 rbd info testimg5 |
grep 'size 256 MiB'
90 rbd snap
ls testimg4 |
grep -v 'SNAPID' |
wc -l |
grep 1
91 rbd snap
ls testimg4 |
grep '.*snap1.*'
93 rbd
export testimg1
/tmp
/img1.new
94 rbd
export testimg2
/tmp
/img2.new
95 rbd
export testimg3
/tmp
/img3.new
96 rbd
export testimg-diff1
/tmp
/img-diff1.new
97 rbd
export testimg-diff2
/tmp
/img-diff2.new
98 rbd
export testimg-diff3
/tmp
/img-diff3.new
100 cmp /tmp
/img2
/tmp
/img2.new
101 cmp /tmp
/img3
/tmp
/img3.new
102 cmp /tmp
/img2
/tmp
/img-diff2.new
103 cmp /tmp
/img3
/tmp
/img-diff3.new
106 rbd snap rollback
--snap=snap1 testimg1
107 rbd snap rollback
--snap=snap1 testimg-diff1
108 rbd info testimg1 |
grep 'size 256 MiB'
109 rbd info testimg-diff1 |
grep 'size 256 MiB'
110 rbd
export testimg1
/tmp
/img1.snap1
111 rbd
export testimg-diff1
/tmp
/img-diff1.snap1
112 cmp /tmp
/img2
/tmp
/img1.snap1
113 cmp /tmp
/img2
/tmp
/img-diff1.snap1
115 # test create, copy of zero-length images
118 rbd create testimg2
-s 0
119 rbd
cp testimg2 testimg3
120 rbd deep
cp testimg2 testimg6
123 rbd snap
rm --snap=snap1 testimg1
124 rbd snap
rm --snap=snap1 testimg-diff1
125 rbd info
--snap=snap1 testimg1
2>&1 |
grep 'error setting snapshot context: (2) No such file or directory'
126 rbd info
--snap=snap1 testimg-diff1
2>&1 |
grep 'error setting snapshot context: (2) No such file or directory'
129 rbd sparsify testimg1
136 echo "testing rename..."
139 rbd create
--image-format 1 -s 1 foo
140 rbd create
--image-format 2 -s 1 bar
142 rbd rename foo2 bar
2>&1 |
grep exists
144 rbd rename bar2 foo2
2>&1 |
grep exists
146 ceph osd pool create rbd2
8
148 rbd create
-p rbd2
-s 1 foo
149 rbd rename rbd
2/foo rbd
2/bar
150 rbd
-p rbd2
ls |
grep bar
151 rbd rename rbd
2/bar foo
152 rbd rename
--pool rbd2 foo bar
153 ! rbd rename rbd
2/bar
--dest-pool rbd foo
154 rbd rename
--pool rbd2 bar
--dest-pool rbd2 foo
155 rbd
-p rbd2
ls |
grep foo
156 ceph osd pool
rm rbd2 rbd2
--yes-i-really-really-mean-it
165 rbd create
--image-format 1 -s 1 test1
166 rbd create
--image-format 1 -s 1 test2
169 rbd
ls |
wc -l |
grep 2
170 # look for fields in output of ls -l without worrying about space
171 rbd
ls -l |
grep 'test1.*1 MiB.*1'
172 rbd
ls -l |
grep 'test2.*1 MiB.*1'
177 rbd create
--image-format 2 -s 1 test1
178 rbd create
--image-format 2 -s 1 test2
181 rbd
ls |
wc -l |
grep 2
182 rbd
ls -l |
grep 'test1.*1 MiB.*2'
183 rbd
ls -l |
grep 'test2.*1 MiB.*2'
188 rbd create
--image-format 2 -s 1 test1
189 rbd create
--image-format 1 -s 1 test2
192 rbd
ls |
wc -l |
grep 2
193 rbd
ls -l |
grep 'test1.*1 MiB.*2'
194 rbd
ls -l |
grep 'test2.*1 MiB.*1'
197 # test that many images can be shown by ls
198 for i
in $
(seq -w 00 99); do
199 rbd create image.
$i -s 1
201 rbd
ls |
wc -l |
grep 100
202 rbd
ls -l |
grep image |
wc -l |
grep 100
203 for i
in $
(seq -w 00 99); do
207 for i
in $
(seq -w 00 99); do
208 rbd create image.
$i --image-format 2 -s 1
210 rbd
ls |
wc -l |
grep 100
211 rbd
ls -l |
grep image |
wc -l |
grep 100
212 for i
in $
(seq -w 00 99); do
218 echo "testing remove..."
221 rbd remove
"NOT_EXIST" && exit 1 || true
# remove should fail
222 rbd create
--image-format 1 -s 1 test1
224 rbd
ls |
wc -l |
grep "^0$"
226 rbd create
--image-format 2 -s 1 test2
228 rbd
ls |
wc -l |
grep "^0$"
230 # check that remove succeeds even if it's
231 # interrupted partway through. simulate this
232 # by removing some objects manually.
234 # remove with header missing (old format)
235 rbd create
--image-format 1 -s 1 test1
236 rados
rm -p rbd test1.rbd
238 rbd
ls |
wc -l |
grep "^0$"
240 if [ $tiered -eq 0 ]; then
241 # remove with header missing
242 rbd create
--image-format 2 -s 1 test2
243 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
244 rados
-p rbd
rm $HEADER
246 rbd
ls |
wc -l |
grep "^0$"
248 # remove with id missing
249 rbd create
--image-format 2 -s 1 test2
250 rados
-p rbd
rm rbd_id.test2
252 rbd
ls |
wc -l |
grep "^0$"
254 # remove with header and id missing
255 rbd create
--image-format 2 -s 1 test2
256 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
257 rados
-p rbd
rm $HEADER
258 rados
-p rbd
rm rbd_id.test2
260 rbd
ls |
wc -l |
grep "^0$"
263 # remove with rbd_children object missing (and, by extension,
264 # with child not mentioned in rbd_children)
265 rbd create
--image-format 2 -s 1 test2
266 rbd snap create test2@snap
267 rbd snap protect test2@snap
268 rbd clone test2@snap clone
--rbd-default-clone-format 1
270 rados
-p rbd
rm rbd_children
272 rbd
ls |
grep clone |
wc -l |
grep '^0$'
274 rbd snap unprotect test2@snap
275 rbd snap
rm test2@snap
280 echo "testing locking..."
283 rbd create
$RBD_CREATE_ARGS -s 1 test1
284 rbd lock list test1 |
wc -l |
grep '^0$'
285 rbd lock add test1 id
286 rbd lock list test1 |
grep ' 1 '
287 LOCKER
=$
(rbd lock list test1 |
tail -n 1 |
awk '{print $1;}')
288 rbd lock remove test1 id
$LOCKER
289 rbd lock list test1 |
wc -l |
grep '^0$'
291 rbd lock add test1 id
--shared tag
292 rbd lock list test1 |
grep ' 1 '
293 rbd lock add test1 id
--shared tag
294 rbd lock list test1 |
grep ' 2 '
295 rbd lock add test1 id2
--shared tag
296 rbd lock list test1 |
grep ' 3 '
297 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
298 if rbd info test1 |
grep -qE "features:.*exclusive"
300 # new locking functionality requires all locks to be released
301 while [ -n "$(rbd lock list test1)" ]
303 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
309 test_pool_image_args
() {
310 echo "testing pool and image args..."
313 ceph osd pool delete
test test --yes-i-really-really-mean-it || true
314 ceph osd pool create
test 32
316 truncate
-s 1 /tmp
/empty
/tmp
/empty@snap
318 rbd
ls |
wc -l |
grep 0
319 rbd create
-s 1 test1
320 rbd
ls |
grep -q test1
321 rbd import
--image test2
/tmp
/empty
322 rbd
ls |
grep -q test2
323 rbd
--dest test3 import
/tmp
/empty
324 rbd
ls |
grep -q test3
325 rbd import
/tmp
/empty foo
328 # should fail due to "destination snapname specified"
329 rbd import
--dest test
/empty@snap
/tmp
/empty
&& exit 1 || true
330 rbd import
/tmp
/empty test
/empty@snap
&& exit 1 || true
331 rbd import
--image test
/empty@snap
/tmp
/empty
&& exit 1 || true
332 rbd import
/tmp
/empty@snap
&& exit 1 || true
334 rbd
ls test |
wc -l |
grep 0
335 rbd import
/tmp
/empty test
/test1
336 rbd
ls test |
grep -q test1
337 rbd
-p test import
/tmp
/empty test2
338 rbd
ls test |
grep -q test2
339 rbd
--image test3
-p test import
/tmp
/empty
340 rbd
ls test |
grep -q test3
341 rbd
--image test4
-p test import
/tmp
/empty
342 rbd
ls test |
grep -q test4
343 rbd
--dest test5
-p test import
/tmp
/empty
344 rbd
ls test |
grep -q test5
345 rbd
--dest test6
--dest-pool test import
/tmp
/empty
346 rbd
ls test |
grep -q test6
347 rbd
--image test7
--dest-pool test import
/tmp
/empty
348 rbd
ls test |
grep -q test7
349 rbd
--image test
/test8 import
/tmp
/empty
350 rbd
ls test |
grep -q test8
351 rbd
--dest test
/test9 import
/tmp
/empty
352 rbd
ls test |
grep -q test9
353 rbd import
--pool test /tmp
/empty
354 rbd
ls test |
grep -q empty
356 # copy with no explicit pool goes to pool rbd
357 rbd copy test
/test9 test10
358 rbd
ls test |
grep -qv test10
359 rbd
ls |
grep -q test10
360 rbd copy test
/test9 test
/test10
361 rbd
ls test |
grep -q test10
362 rbd copy
--pool test test10
--dest-pool test test11
363 rbd
ls test |
grep -q test11
364 rbd copy
--dest-pool rbd
--pool test test11 test12
366 rbd
ls test |
grep -qv test12
368 rm -f /tmp
/empty
/tmp
/empty@snap
369 ceph osd pool delete
test test --yes-i-really-really-mean-it
371 for f
in foo test1 test10 test12 test2 test3
; do
377 echo "testing clone..."
379 rbd create test1
$RBD_CREATE_ARGS -s 1
380 rbd snap create test1@s1
381 rbd snap protect test1@s1
383 ceph osd pool create rbd2
8
385 rbd clone test1@s1 rbd
2/clone
386 rbd
-p rbd2
ls |
grep clone
387 rbd
-p rbd2
ls -l |
grep clone |
grep test1@s1
388 rbd
ls |
grep -v clone
389 rbd flatten rbd
2/clone
390 rbd snap create rbd
2/clone@s1
391 rbd snap protect rbd
2/clone@s1
392 rbd clone rbd
2/clone@s1 clone2
394 rbd
ls -l |
grep clone2 |
grep rbd
2/clone@s1
395 rbd
-p rbd2
ls |
grep -v clone2
398 rbd snap unprotect rbd
2/clone@s1
399 rbd snap
rm rbd
2/clone@s1
401 rbd snap unprotect test1@s1
404 ceph osd pool
rm rbd2 rbd2
--yes-i-really-really-mean-it
408 echo "testing trash..."
411 rbd create
$RBD_CREATE_ARGS -s 1 test1
412 rbd create
$RBD_CREATE_ARGS -s 1 test2
415 rbd
ls |
wc -l |
grep 2
416 rbd
ls -l |
grep 'test1.*2.*'
417 rbd
ls -l |
grep 'test2.*2.*'
421 rbd
ls |
wc -l |
grep 1
422 rbd
ls -l |
grep 'test2.*2.*'
424 rbd trash
ls |
grep test1
425 rbd trash
ls |
wc -l |
grep 1
426 rbd trash
ls -l |
grep 'test1.*USER.*'
427 rbd trash
ls -l |
grep -v 'protected until'
429 ID
=`rbd trash ls | cut -d ' ' -f 1`
433 ID
=`rbd trash ls | cut -d ' ' -f 1`
434 rbd info
--image-id $ID |
grep "rbd image 'test2'"
436 rbd trash restore
$ID
438 rbd
ls |
wc -l |
grep 1
439 rbd
ls -l |
grep 'test2.*2.*'
441 rbd trash
mv test2
--expires-at "3600 sec"
442 rbd trash
ls |
grep test2
443 rbd trash
ls |
wc -l |
grep 1
444 rbd trash
ls -l |
grep 'test2.*USER.*protected until'
446 rbd trash
rm $ID 2>&1 |
grep 'Deferment time has not expired'
447 rbd trash
rm --image-id $ID --force
449 rbd create
$RBD_CREATE_ARGS -s 1 test1
450 rbd snap create test1@snap1
451 rbd snap protect test1@snap1
454 rbd trash
ls |
grep test1
455 rbd trash
ls |
wc -l |
grep 1
456 rbd trash
ls -l |
grep 'test1.*USER.*'
457 rbd trash
ls -l |
grep -v 'protected until'
459 ID
=`rbd trash ls | cut -d ' ' -f 1`
460 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 1
461 rbd snap
ls --image-id $ID |
grep '.*snap1.*'
463 rbd snap unprotect
--image-id $ID --snap snap1
464 rbd snap
rm --image-id $ID --snap snap1
465 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
467 rbd trash restore
$ID
468 rbd snap create test1@snap1
469 rbd snap create test1@snap2
470 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 2
471 rbd snap purge
--image-id $ID
472 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
474 rbd
rm --rbd_move_to_trash_on_remove=true
--rbd_move_to_trash_on_remove_expire_seconds=3600 test1
475 rbd trash
ls |
grep test1
476 rbd trash
ls |
wc -l |
grep 1
477 rbd trash
ls -l |
grep 'test1.*USER.*protected until'
478 rbd trash
rm $ID 2>&1 |
grep 'Deferment time has not expired'
479 rbd trash
rm --image-id $ID --force
485 echo "testing trash purge..."
489 rbd trash
ls |
wc -l |
grep 0
491 rbd create
$RBD_CREATE_ARGS foo
-s 1
492 rbd create
$RBD_CREATE_ARGS bar
-s 1
494 rbd trash
mv foo
--expires-at "10 sec"
495 rbd trash
mv bar
--expires-at "30 sec"
497 rbd trash purge
--expired-before "now + 10 sec"
498 rbd trash
ls |
grep -v foo |
wc -l |
grep 1
499 rbd trash
ls |
grep bar
501 LAST_IMG
=$
(rbd trash
ls |
grep bar |
awk '{print $1;}')
502 rbd trash
rm $LAST_IMG --force --no-progress |
grep -v '.' |
wc -l |
grep 0
505 test_deep_copy_clone
() {
506 echo "testing deep copy clone..."
509 rbd create testimg1
$RBD_CREATE_ARGS --size 256
510 rbd snap create testimg1
--snap=snap1
511 rbd snap protect testimg1@snap1
512 rbd clone testimg1@snap1 testimg2
513 rbd snap create testimg2@snap2
514 rbd deep copy testimg2 testimg3
515 rbd info testimg3 |
grep 'size 256 MiB'
516 rbd info testimg3 |
grep 'parent: rbd/testimg1@snap1'
517 rbd snap
ls testimg3 |
grep -v 'SNAPID' |
wc -l |
grep 1
518 rbd snap
ls testimg3 |
grep '.*snap2.*'
519 rbd info testimg2 |
grep 'features:.*deep-flatten' || rbd snap
rm testimg2@snap2
520 rbd info testimg3 |
grep 'features:.*deep-flatten' || rbd snap
rm testimg3@snap2
523 rbd snap unprotect testimg1@snap1
524 rbd snap purge testimg2
525 rbd snap purge testimg3
529 rbd snap protect testimg1@snap1
530 rbd clone testimg1@snap1 testimg2
531 rbd snap create testimg2@snap2
532 rbd deep copy
--flatten testimg2 testimg3
533 rbd info testimg3 |
grep 'size 256 MiB'
534 rbd info testimg3 |
grep -v 'parent:'
535 rbd snap
ls testimg3 |
grep -v 'SNAPID' |
wc -l |
grep 1
536 rbd snap
ls testimg3 |
grep '.*snap2.*'
537 rbd info testimg2 |
grep 'features:.*deep-flatten' || rbd snap
rm testimg2@snap2
539 rbd snap unprotect testimg1@snap1
545 echo "testing clone v2..."
548 rbd create
$RBD_CREATE_ARGS -s 1 test1
549 rbd snap create test1@
1
550 rbd clone
--rbd-default-clone-format=1 test1@
1 test2
&& exit 1 || true
551 rbd clone
--rbd-default-clone-format=2 test1@
1 test2
552 rbd clone
--rbd-default-clone-format=2 test1@
1 test3
554 rbd snap protect test1@
1
555 rbd clone
--rbd-default-clone-format=1 test1@
1 test4
557 rbd children test1@
1 |
sort |
tr '\n' ' ' |
grep -E "test2.*test3.*test4"
558 rbd children
--descendants test1 |
sort |
tr '\n' ' ' |
grep -E "test2.*test3.*test4"
561 rbd snap unprotect test1@
1
563 rbd snap remove test1@
1
564 rbd snap list
--all test1 |
grep -E "trash \(1\) *$"
566 rbd snap create test1@
2
567 rbd
rm test1
2>&1 |
grep 'image has snapshots'
570 rbd
rm test1
2>&1 |
grep 'linked clones'
573 rbd
rm test1
2>&1 |
grep 'linked clones'
576 rbd snap list
--all test1 |
wc -l |
grep '^0$'
581 test_thick_provision
() {
582 echo "testing thick provision..."
585 # Try to create small and large thick-pro image and
586 # check actual size. (64M and 4G)
588 # Small thick-pro image test
589 rbd create
$RBD_CREATE_ARGS --thick-provision -s 64M test1
592 while [ $count -lt 10 ]
594 rbd du|
grep test1|
tr -s " "|cut
-d " " -f 4-5|
grep '^64 MiB' && ret
=$?
599 count
=`expr $count + 1`
608 rbd
ls |
grep test1 |
wc -l |
grep '^0$'
610 # Large thick-pro image test
611 rbd create
$RBD_CREATE_ARGS --thick-provision -s 4G test1
614 while [ $count -lt 10 ]
616 rbd du|
grep test1|
tr -s " "|cut
-d " " -f 4-5|
grep '^4 GiB' && ret
=$?
621 count
=`expr $count + 1`
630 rbd
ls |
grep test1 |
wc -l |
grep '^0$'
634 echo "testing namespace..."
637 rbd namespace
ls |
wc -l |
grep '^0$'
638 rbd namespace create rbd
/test1
639 rbd namespace create
--pool rbd
--namespace test2
640 rbd namespace create
--namespace test3
641 expect_fail rbd namespace create rbd
/test3
643 rbd namespace list |
grep 'test' |
wc -l |
grep '^3$'
645 expect_fail rbd namespace remove
--pool rbd missing
647 rbd create
$RBD_CREATE_ARGS --size 1G rbd
/test1/image1
649 # default test1 ns to test2 ns clone
650 rbd bench
--io-type write --io-pattern rand
--io-total 32M
--io-size 4K rbd
/test1/image1
651 rbd snap create rbd
/test1/image1@
1
652 rbd clone
--rbd-default-clone-format 2 rbd
/test1/image1@
1 rbd
/test2/image1
653 rbd snap
rm rbd
/test1/image1@
1
654 cmp <(rbd
export rbd
/test1/image1
-) <(rbd
export rbd
/test2/image1
-)
655 rbd
rm rbd
/test2/image1
657 # default ns to test1 ns clone
658 rbd create
$RBD_CREATE_ARGS --size 1G rbd
/image2
659 rbd bench
--io-type write --io-pattern rand
--io-total 32M
--io-size 4K rbd
/image2
660 rbd snap create rbd
/image2@
1
661 rbd clone
--rbd-default-clone-format 2 rbd
/image2@
1 rbd
/test2/image2
662 rbd snap
rm rbd
/image2@
1
663 cmp <(rbd
export rbd
/image2
-) <(rbd
export rbd
/test2/image2
-)
664 expect_fail rbd
rm rbd
/image2
665 rbd
rm rbd
/test2/image2
668 rbd create
$RBD_CREATE_ARGS --size 1G
--namespace test1 image2
669 expect_fail rbd namespace remove rbd
/test1
671 rbd group create rbd
/test1/group1
672 rbd group image add rbd
/test1/group1 rbd
/test1/image1
673 rbd group
rm rbd
/test1/group1
675 rbd trash move rbd
/test1/image1
676 ID
=`rbd trash --namespace test1 ls | cut -d ' ' -f 1`
677 rbd trash
rm rbd
/test1/${ID}
679 rbd remove rbd
/test1/image2
681 rbd namespace remove
--pool rbd
--namespace test1
682 rbd namespace remove
--namespace test3
684 rbd namespace list |
grep 'test' |
wc -l |
grep '^1$'
685 rbd namespace remove rbd
/test2
688 get_migration_state
() {
691 rbd
--format xml status
$image |
692 $XMLSTARLET sel
-t -v '//status/migration/state'
696 echo "testing migration..."
698 ceph osd pool create rbd2
8
701 # Convert to new format
702 rbd create
--image-format 1 -s 128M test1
703 rbd info test1 |
grep 'format: 1'
704 rbd migration prepare test1
--image-format 2
705 test "$(get_migration_state test1)" = prepared
706 rbd info test1 |
grep 'format: 2'
707 rbd
rm test1
&& exit 1 || true
708 rbd migration execute test1
709 test "$(get_migration_state test1)" = executed
710 rbd migration commit test1
711 get_migration_state test1
&& exit 1 || true
713 # Enable layering (and some other features)
714 rbd info test1 |
grep 'features: .*layering' && exit 1 || true
715 rbd migration prepare test1
--image-feature \
716 layering
,exclusive-lock
,object-map
,fast-diff
,deep-flatten
717 rbd info test1 |
grep 'features: .*layering'
718 rbd migration execute test1
719 rbd migration commit test1
721 # Migration to other pool
722 rbd migration prepare test1 rbd
2/test1
723 test "$(get_migration_state rbd2/test1)" = prepared
724 rbd
ls |
wc -l |
grep '^0$'
725 rbd
-p rbd2
ls |
grep test1
726 rbd migration execute test1
727 test "$(get_migration_state rbd2/test1)" = executed
728 rbd
rm rbd
2/test1
&& exit 1 || true
729 rbd migration commit test1
731 # Migration to other namespace
732 rbd namespace create rbd
2/ns1
733 rbd namespace create rbd
2/ns2
734 rbd migration prepare rbd
2/test1 rbd
2/ns
1/test1
735 test "$(get_migration_state rbd2/ns1/test1)" = prepared
736 rbd migration execute rbd
2/test1
737 test "$(get_migration_state rbd2/ns1/test1)" = executed
738 rbd migration commit rbd
2/test1
739 rbd migration prepare rbd
2/ns
1/test1 rbd
2/ns
2/test1
740 rbd migration execute rbd
2/ns
2/test1
741 rbd migration commit rbd
2/ns
2/test1
744 rbd create
-s 128M test1
745 rbd migration prepare test1
--data-pool rbd2
746 rbd info test1 |
grep 'data_pool: rbd2'
747 rbd migration execute test1
748 rbd migration commit test1
751 rbd migration prepare test1
752 expect_fail rbd trash
mv test1
753 ID
=`rbd trash ls -a | cut -d ' ' -f 1`
754 expect_fail rbd trash
rm $ID
755 expect_fail rbd trash restore
$ID
756 rbd migration abort test1
760 dd if=/dev
/urandom bs
=1M count
=1 | rbd
--image-format 2 import
- test1
761 md5sum=$
(rbd
export test1
- |
md5sum)
762 rbd snap create test1@snap1
763 rbd snap protect test1@snap1
764 rbd snap create test1@snap2
765 rbd clone test1@snap1 clone_v1
--rbd_default_clone_format=1
766 rbd clone test1@snap2 clone_v2
--rbd_default_clone_format=2
767 rbd info clone_v1 | fgrep
'parent: rbd/test1@snap1'
768 rbd info clone_v2 | fgrep
'parent: rbd/test1@snap2'
769 rbd info clone_v2 |
grep 'op_features: clone-child'
770 test "$(rbd export clone_v1 - | md5sum)" = "${md5sum}"
771 test "$(rbd export clone_v2 - | md5sum)" = "${md5sum}"
772 test "$(rbd children test1@snap1)" = "rbd/clone_v1"
773 test "$(rbd children test1@snap2)" = "rbd/clone_v2"
774 rbd migration prepare test1 rbd
2/test2
775 rbd info clone_v1 | fgrep
'parent: rbd2/test2@snap1'
776 rbd info clone_v2 | fgrep
'parent: rbd2/test2@snap2'
777 rbd info clone_v2 | fgrep
'op_features: clone-child'
778 test "$(rbd children rbd2/test2@snap1)" = "rbd/clone_v1"
779 test "$(rbd children rbd2/test2@snap2)" = "rbd/clone_v2"
780 rbd migration execute test1
781 expect_fail rbd migration commit test1
782 rbd migration commit test1
--force
783 test "$(rbd export clone_v1 - | md5sum)" = "${md5sum}"
784 test "$(rbd export clone_v2 - | md5sum)" = "${md5sum}"
785 rbd migration prepare rbd
2/test2 test1
786 rbd info clone_v1 | fgrep
'parent: rbd/test1@snap1'
787 rbd info clone_v2 | fgrep
'parent: rbd/test1@snap2'
788 rbd info clone_v2 | fgrep
'op_features: clone-child'
789 test "$(rbd children test1@snap1)" = "rbd/clone_v1"
790 test "$(rbd children test1@snap2)" = "rbd/clone_v2"
791 rbd migration execute test1
792 expect_fail rbd migration commit test1
793 rbd migration commit test1
--force
794 test "$(rbd export clone_v1 - | md5sum)" = "${md5sum}"
795 test "$(rbd export clone_v2 - | md5sum)" = "${md5sum}"
798 rbd snap unprotect test1@snap1
802 for format
in 1 2; do
803 # Abort migration after successful prepare
804 rbd create
-s 128M
--image-format ${format} test2
805 rbd migration prepare test2
--data-pool rbd2
806 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
807 rbd migration abort test2
808 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
811 # Abort migration after successful execute
812 rbd create
-s 128M
--image-format ${format} test2
813 rbd migration prepare test2
--data-pool rbd2
814 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
815 rbd migration execute test2
816 rbd migration abort test2
817 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
820 # Migration is automatically aborted if prepare failed
821 rbd create
-s 128M
--image-format ${format} test2
822 rbd migration prepare test2
--data-pool INVALID_DATA_POOL
&& exit 1 || true
823 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
826 # Abort migration to other pool
827 rbd create
-s 128M
--image-format ${format} test2
828 rbd migration prepare test2 rbd
2/test2
829 rbd bench
--io-type write --io-size 1024 --io-total 1024 rbd
2/test2
830 rbd migration abort test2
831 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
834 # The same but abort using destination image
835 rbd create
-s 128M
--image-format ${format} test2
836 rbd migration prepare test2 rbd
2/test2
837 rbd migration abort rbd
2/test2
838 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
841 test $format = 1 && continue
843 # Abort migration to other namespace
844 rbd create
-s 128M
--image-format ${format} test2
845 rbd migration prepare test2 rbd
2/ns
1/test3
846 rbd bench
--io-type write --io-size 1024 --io-total 1024 rbd
2/ns
1/test3
847 rbd migration abort test2
848 rbd bench
--io-type write --io-size 1024 --io-total 1024 test2
853 ceph osd pool
rm rbd2 rbd2
--yes-i-really-really-mean-it
857 echo "testing config..."
860 expect_fail rbd config global
set osd rbd_cache true
861 expect_fail rbd config global
set global debug_ms
10
862 expect_fail rbd config global
set global rbd_UNKNOWN false
863 expect_fail rbd config global
set global rbd_cache INVALID
864 rbd config global
set global rbd_cache false
865 rbd config global
set client rbd_cache true
866 rbd config global
set client
.123 rbd_cache false
867 rbd config global get global rbd_cache |
grep '^false$'
868 rbd config global get client rbd_cache |
grep '^true$'
869 rbd config global get client
.123 rbd_cache |
grep '^false$'
870 expect_fail rbd config global get client.UNKNOWN rbd_cache
871 rbd config global list global |
grep '^rbd_cache * false * global *$'
872 rbd config global list client |
grep '^rbd_cache * true * client *$'
873 rbd config global list client
.123 |
grep '^rbd_cache * false * client.123 *$'
874 rbd config global list client.UNKNOWN |
grep '^rbd_cache * true * client *$'
875 rbd config global
rm client rbd_cache
876 expect_fail rbd config global get client rbd_cache
877 rbd config global list client |
grep '^rbd_cache * false * global *$'
878 rbd config global
rm client
.123 rbd_cache
879 rbd config global
rm global rbd_cache
881 rbd config pool
set rbd rbd_cache true
882 rbd config pool list rbd |
grep '^rbd_cache * true * pool *$'
883 rbd config pool get rbd rbd_cache |
grep '^true$'
885 rbd create
$RBD_CREATE_ARGS -s 1 test1
887 rbd config image list rbd
/test1 |
grep '^rbd_cache * true * pool *$'
888 rbd config image
set rbd
/test1 rbd_cache false
889 rbd config image list rbd
/test1 |
grep '^rbd_cache * false * image *$'
890 rbd config image get rbd
/test1 rbd_cache |
grep '^false$'
891 rbd config image remove rbd
/test1 rbd_cache
892 expect_fail rbd config image get rbd
/test1 rbd_cache
893 rbd config image list rbd
/test1 |
grep '^rbd_cache * true * pool *$'
895 rbd config pool remove rbd rbd_cache
896 expect_fail rbd config pool get rbd rbd_cache
897 rbd config pool list rbd |
grep '^rbd_cache * true * config *$'
912 RBD_CREATE_ARGS
="--image-format 2"