]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/cli-integration/rbd: add unmap test 4402/head
authorIlya Dryomov <idryomov@gmail.com>
Fri, 17 Apr 2015 14:27:08 +0000 (17:27 +0300)
committerIlya Dryomov <idryomov@gmail.com>
Sun, 19 Apr 2015 11:45:37 +0000 (14:45 +0300)
Add a test to exercise rbd unmap.  This was inspired by and is mostly
for rbd unmap <image-name> (aka spec), but rbd unmap <device> is tested
as well.  Any significant change to krbd.cc or corresponding rbd cli
should be tested in the following three configurations at least:

- kernel < 3.14
- kernel >= 3.14, rbd.single_major=N
- kernel >= 3.14, rbd.single_major=Y

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
src/test/cli-integration/rbd/unmap.t [new file with mode: 0644]

diff --git a/src/test/cli-integration/rbd/unmap.t b/src/test/cli-integration/rbd/unmap.t
new file mode 100644 (file)
index 0000000..5549661
--- /dev/null
@@ -0,0 +1,470 @@
+
+Setup
+=====
+
+  $ rbd create --size 1 img
+  $ rbd snap create img@snap
+  $ rbd create --size 1 anotherimg
+  $ ceph osd pool create custom 8 >/dev/null 2>&1
+  $ rbd create --size 1 custom/img
+  $ rbd snap create custom/img@snap
+  $ rbd snap create custom/img@anothersnap
+
+Spell out device instead of using $DEV - sfdisk is not a joke.
+
+  $ DEV=$(sudo rbd map img)
+  $ cat <<EOF | sudo sfdisk /dev/rbd[01] >/dev/null 2>&1
+  > unit: sectors
+  > /dev/rbd0p1 : start=        2, size=        2, Id=83
+  > /dev/rbd0p2 : start=        5, size=     2043, Id= 5
+  > /dev/rbd0p3 : start=        0, size=        0, Id= 0
+  > /dev/rbd0p4 : start=        0, size=        0, Id= 0
+  > /dev/rbd0p5 : start=        7, size=        2, Id=83
+  > EOF
+
+
+Unmap by device
+===============
+
+Unmap by device (img is already mapped):
+
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap $DEV
+  $ rbd showmapped
+
+Unmap by device partition:
+
+  $ DEV=$(sudo rbd map img)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap ${DEV}p1
+  $ rbd showmapped
+
+  $ DEV=$(sudo rbd map img)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap ${DEV}p5
+  $ rbd showmapped
+
+Not a block device - random junk prefixed with /dev/ (so it's not
+interpreted as a spec):
+
+  $ sudo rbd unmap /dev/foobar
+  rbd: '/dev/foobar' is not a block device
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+Not a block device - device that's just been unmapped:
+
+  $ DEV=$(sudo rbd map img)
+  $ sudo rbd unmap $DEV
+  $ sudo rbd unmap $DEV
+  rbd: '/dev/rbd?' is not a block device (glob)
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+A block device, but not rbd:
+
+  $ sudo rbd unmap /dev/[sv]da
+  rbd: '/dev/?da' is not an rbd device (glob)
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+
+Unmap by spec
+=============
+
+img:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd --image img unmap
+  $ rbd showmapped
+
+img@snap:
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  $ rbd showmapped
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd --snap snap unmap img
+  $ rbd showmapped
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd --image img --snap snap unmap
+  $ rbd showmapped
+
+pool/img@snap, default pool:
+
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap rbd/img@snap
+  $ rbd showmapped
+
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool rbd unmap img@snap
+  $ rbd showmapped
+
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool rbd --snap snap unmap img
+  $ rbd showmapped
+
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool rbd --image img --snap snap unmap
+  $ rbd showmapped
+
+pool/img@snap, custom pool:
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  $ rbd showmapped
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool custom unmap img@snap
+  $ rbd showmapped
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool custom --snap snap unmap img
+  $ rbd showmapped
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd --pool custom --image img --snap snap unmap
+  $ rbd showmapped
+
+Not a mapped spec - random junk (which gets interpreted as a spec):
+
+  $ sudo rbd unmap foobar
+  rbd: rbd/foobar@-: not a mapped image or snapshot
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+  $ sudo rbd --image foobar unmap
+  rbd: rbd/foobar@-: not a mapped image or snapshot
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+Not a mapped spec - spec that's just been unmapped:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd unmap img
+  $ sudo rbd unmap img
+  rbd: rbd/img@-: not a mapped image or snapshot
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd unmap img@snap
+  $ sudo rbd unmap img@snap
+  rbd: rbd/img@snap: not a mapped image or snapshot
+  rbd: unmap failed: (22) Invalid argument
+  [22]
+
+Either --image or arg:
+
+  $ sudo rbd unmap --image foobar barbaz
+  rbd: extraneous parameter barbaz
+  [1]
+
+  $ sudo rbd unmap
+  rbd: unmap requires either image name or device path
+  [1]
+
+
+Two images
+==========
+
+Unmap img first:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map anotherimg
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image      snap device    
+  ?  rbd  img        -    /dev/rbd?  (glob)
+  ?  rbd  anotherimg -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+  id pool image      snap device    
+  ?  rbd  anotherimg -    /dev/rbd?  (glob)
+  $ sudo rbd unmap anotherimg
+  $ rbd showmapped
+
+Unmap anotherimg first:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map anotherimg
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image      snap device    
+  ?  rbd  img        -    /dev/rbd?  (glob)
+  ?  rbd  anotherimg -    /dev/rbd?  (glob)
+  $ sudo rbd unmap anotherimg
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+
+
+Image and its snap
+==================
+
+Unmap the image first:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  $ rbd showmapped
+
+Unmap the snap first:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+
+
+Two snaps of the same image
+===========================
+
+Unmap snap first:
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map custom/img@anothersnap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap        device    
+  ?  custom img   snap        /dev/rbd?  (glob)
+  ?  custom img   anothersnap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  $ rbd showmapped
+  id pool   image snap        device    
+  ?  custom img   anothersnap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@anothersnap
+  $ rbd showmapped
+
+Unmap anothersnap first:
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map custom/img@anothersnap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap        device    
+  ?  custom img   snap        /dev/rbd?  (glob)
+  ?  custom img   anothersnap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@anothersnap
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  $ rbd showmapped
+
+
+Same img and snap in different pools
+====================================
+
+img:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map custom/img
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  rbd    img   -    /dev/rbd?  (glob)
+  ?  custom img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img
+  $ rbd showmapped
+
+img@snap:
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  rbd    img   snap /dev/rbd?  (glob)
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  $ rbd showmapped
+
+
+Same spec mapped twice
+======================
+
+img:
+
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ sudo rbd map img
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  rbd: rbd/img@-: mapped more than once, unmapping /dev/rbd? only (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   -    /dev/rbd?  (glob)
+  $ sudo rbd unmap img
+  $ rbd showmapped
+
+img@snap:
+
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  rbd: rbd/img@snap: mapped more than once, unmapping /dev/rbd? only (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap img@snap
+  $ rbd showmapped
+
+pool/img@snap, default pool:
+
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map rbd/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap rbd/img@snap
+  rbd: rbd/img@snap: mapped more than once, unmapping /dev/rbd? only (glob)
+  $ rbd showmapped
+  id pool image snap device    
+  ?  rbd  img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap rbd/img@snap
+  $ rbd showmapped
+
+pool/img@snap, custom pool:
+
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ sudo rbd map custom/img@snap
+  /dev/rbd? (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  rbd: custom/img@snap: mapped more than once, unmapping /dev/rbd? only (glob)
+  $ rbd showmapped
+  id pool   image snap device    
+  ?  custom img   snap /dev/rbd?  (glob)
+  $ sudo rbd unmap custom/img@snap
+  $ rbd showmapped
+
+
+Teardown
+========
+
+  $ ceph osd pool delete custom custom --yes-i-really-really-mean-it >/dev/null 2>&1
+  $ rbd snap purge anotherimg >/dev/null 2>&1
+  $ rbd rm anotherimg >/dev/null 2>&1
+  $ rbd snap purge img >/dev/null 2>&1
+  $ rbd rm img >/dev/null 2>&1
+