]> git.proxmox.com Git - ceph.git/blobdiff - ceph/qa/workunits/rbd/rbd-ggate.sh
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / qa / workunits / rbd / rbd-ggate.sh
index 536070a2f9627c13d0689217e2da50dbc884a370..9b60158d8f908e6eef40086e52de3c53d14d89dd 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh -ex
 
 POOL=testrbdggate$$
+NS=ns
 IMAGE=test
 SIZE=64
 DATA=
@@ -15,6 +16,10 @@ else
   exit 1
 fi
 
+if [ `uname -K` -ge 1200078 ] ; then
+    RBD_GGATE_RESIZE_SUPPORTED=1
+fi
+
 _sudo()
 {
     local cmd
@@ -32,8 +37,24 @@ _sudo()
     sudo -nE "${cmd}" "$@"
 }
 
+check_geom_gate() 
+{
+    # See if geom_date is load, or can be loaded.
+    # Otherwise the tests can not run
+    if ! kldstat -q -n geom_gate ; then 
+        # See if we can load it
+        if ! _sudo kldload geom_gate ; then
+           echo Not able to load geom_gate
+           echo check /var/log/messages as to why 
+           exit 1
+       fi
+    fi
+}
+
 setup()
 {
+    local ns x
+
     if [ -e CMakeCache.txt ]; then
        # running under cmake build dir
 
@@ -50,23 +71,32 @@ setup()
     fi
 
     _sudo echo test sudo
+    check_geom_gate
 
     trap cleanup INT TERM EXIT
     TEMPDIR=`mktemp -d`
     DATA=${TEMPDIR}/data
     dd if=/dev/urandom of=${DATA} bs=1M count=${SIZE}
-    ceph osd pool create ${POOL} 64 64
-    rbd --dest-pool ${POOL} --no-progress import ${DATA} ${IMAGE}
+    ceph osd pool create ${POOL} 32
+
+    rbd namespace create ${POOL}/${NS}
+    for ns in '' ${NS}; do
+        rbd --dest-pool ${POOL} --dest-namespace "${ns}" --no-progress import \
+            ${DATA} ${IMAGE}
+    done
 }
 
 cleanup()
 {
+    local ns s
+
     set +e
     rm -Rf ${TEMPDIR}
     if [ -n "${DEV}" ]
     then
        _sudo rbd-ggate unmap ${DEV}
     fi
+
     ceph osd pool delete ${POOL} ${POOL} --yes-i-really-really-mean-it
 }
 
@@ -81,7 +111,7 @@ expect_false()
 
 setup
 
-# exit status test
+echo  exit status test
 expect_false rbd-ggate
 expect_false rbd-ggate INVALIDCMD
 if [ `id -u` -ne 0 ]
@@ -90,31 +120,36 @@ then
 fi
 expect_false _sudo rbd-ggate map INVALIDIMAGE
 
-# map test using the first unused device
+echo  map test using the first unused device
 DEV=`_sudo rbd-ggate map ${POOL}/${IMAGE}`
-_sudo rbd-ggate list | grep "^${DEV}$"
+rbd-ggate list | grep " ${DEV} *$"
 
-# map test specifying the device
+echo  map test specifying the device
 expect_false _sudo rbd-ggate --device ${DEV} map ${POOL}/${IMAGE}
 dev1=${DEV}
 _sudo rbd-ggate unmap ${DEV}
-_sudo rbd-ggate list | expect_false grep "^${DEV}$"
+rbd-ggate list | expect_false grep " ${DEV} *$"
 DEV=
 # XXX: race possible when the device is reused by other process
 DEV=`_sudo rbd-ggate --device ${dev1} map ${POOL}/${IMAGE}`
 [ "${DEV}" = "${dev1}" ]
-_sudo rbd-ggate list | grep "^${DEV}$"
+rbd-ggate list | grep " ${DEV} *$"
+
+echo  list format test
+expect_false _sudo rbd-ggate --format INVALID list
+rbd-ggate --format json --pretty-format list
+rbd-ggate --format xml list
 
-# read test
+echo  read test
 [ "`dd if=${DATA} bs=1M | md5`" = "`_sudo dd if=${DEV} bs=1M | md5`" ]
 
-# write test
+echo  write test
 dd if=/dev/urandom of=${DATA} bs=1M count=${SIZE}
 _sudo dd if=${DATA} of=${DEV} bs=1M
 _sudo sync
 [ "`dd if=${DATA} bs=1M | md5`" = "`rbd -p ${POOL} --no-progress export ${IMAGE} - | md5`" ]
 
-# trim test
+echo  trim test
 provisioned=`rbd -p ${POOL} --format xml du ${IMAGE} |
   $XMLSTARLET sel -t -m "//stats/images/image/provisioned_size" -v .`
 used=`rbd -p ${POOL} --format xml du ${IMAGE} |
@@ -128,18 +163,20 @@ used=`rbd -p ${POOL} --format xml du ${IMAGE} |
   $XMLSTARLET sel -t -m "//stats/images/image/used_size" -v .`
 [ "${used}" -lt "${provisioned}" ]
 
-# resize test
+echo  resize test
 devname=$(basename ${DEV})
 size=$(geom gate list ${devname} | awk '$1 ~ /Mediasize:/ {print $2}')
 test -n "${size}"
 rbd resize ${POOL}/${IMAGE} --size $((SIZE * 2))M
 rbd info ${POOL}/${IMAGE}
 if [ -z "$RBD_GGATE_RESIZE_SUPPORTED" ]; then
-    # XXX: ggate device resize is not supported by vanila kernel.
-    # rbd-ggate should terminate when detecting resize.
-    _sudo rbd-ggate list | expect_false grep "^${DEV}$"
+    # when resizing is not supported:
+    # resizing the underlying image for a GEOM ggate will stop the
+    # ggate process servicing the device. So we can resize and test 
+    # the disappearance of the device
+    rbd-ggate list | expect_false grep " ${DEV} *$" 
 else
-    _sudo rbd-ggate list | grep "^${DEV}$"
+    rbd-ggate list | grep " ${DEV} *$"
     size2=$(geom gate list ${devname} | awk '$1 ~ /Mediasize:/ {print $2}')
     test -n "${size2}"
     test ${size2} -eq $((size * 2))
@@ -158,19 +195,19 @@ else
 fi
 DEV=
 
-# read-only option test
+echo  read-only option test
 DEV=`_sudo rbd-ggate map --read-only ${POOL}/${IMAGE}`
 devname=$(basename ${DEV})
-_sudo rbd-ggate list | grep "^${DEV}$"
+rbd-ggate list | grep " ${DEV} *$"
 access=$(geom gate list ${devname} | awk '$1 == "access:" {print $2}')
 test "${access}" = "read-only"
 _sudo dd if=${DEV} of=/dev/null bs=1M
 expect_false _sudo dd if=${DATA} of=${DEV} bs=1M
 _sudo rbd-ggate unmap ${DEV}
 
-# exclusive option test
+echo  exclusive option test
 DEV=`_sudo rbd-ggate map --exclusive ${POOL}/${IMAGE}`
-_sudo rbd-ggate list | grep "^${DEV}$"
+rbd-ggate list | grep " ${DEV} *$"
 _sudo dd if=${DATA} of=${DEV} bs=1M
 _sudo sync
 expect_false timeout 10 \
@@ -179,4 +216,27 @@ _sudo rbd-ggate unmap ${DEV}
 DEV=
 rbd bench -p ${POOL} ${IMAGE} --io-type=write --io-size=1024 --io-total=1024
 
+echo  unmap by image name test
+DEV=`_sudo rbd-ggate map ${POOL}/${IMAGE}`
+rbd-ggate list | grep " ${DEV} *$"
+_sudo rbd-ggate unmap "${POOL}/${IMAGE}"
+rbd-ggate list | expect_false grep " ${DEV} *$"
+DEV=
+
+echo  map/unmap snap test
+rbd snap create ${POOL}/${IMAGE}@snap
+DEV=`_sudo rbd-ggate map ${POOL}/${IMAGE}@snap`
+rbd-ggate list | grep " ${DEV} *$"
+_sudo rbd-ggate unmap "${POOL}/${IMAGE}@snap"
+rbd-ggate list | expect_false grep " ${DEV} *$"
+DEV=
+
+echo map/unmap namespace test
+rbd snap create ${POOL}/${NS}/${IMAGE}@snap
+DEV=`_sudo rbd-ggate map ${POOL}/${NS}/${IMAGE}@snap`
+rbd-ggate list | grep " ${DEV} *$"
+_sudo rbd-ggate unmap "${POOL}/${NS}/${IMAGE}@snap"
+rbd-ggate list | expect_false grep "${DEV} $"
+DEV=
+
 echo OK