]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
qa: update krbd tests for zeroout
authorIlya Dryomov <idryomov@gmail.com>
Fri, 1 Feb 2019 09:35:33 +0000 (10:35 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Sun, 3 Feb 2019 09:57:07 +0000 (10:57 +0100)
Discard no longer guarantees zeroing, use BLKZEROOUT and "fallocate -z"
instead (blkdiscard(8) in xenial doesn't support -z).

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
qa/rbd/krbd_whole_object_discard.t [deleted file]
qa/rbd/krbd_whole_object_zeroout.t [new file with mode: 0644]
qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml [deleted file]
qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml [new file with mode: 0644]
src/test/librbd/fsx.cc

diff --git a/qa/rbd/krbd_whole_object_discard.t b/qa/rbd/krbd_whole_object_discard.t
deleted file mode 100644 (file)
index f527607..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-
-  $ get_block_name_prefix() {
-  >     rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']"
-  > }
-
-  $ rbd create --size 200M img
-  $ DEV=$(sudo rbd map img)
-  $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null
-  $ sudo rbd unmap $DEV
-  $ rbd snap create img@snap
-  $ rbd snap protect img@snap
-
-cloneimg1:
-1 object in an object set, 4M
-25 full object sets
-25 objects in total
-
-  $ rbd clone img@snap cloneimg1
-  $ DEV=$(sudo rbd map cloneimg1)
-  $ hexdump $DEV
-  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ blkdiscard -l 100M $DEV
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-  $ DEV=$(sudo rbd map cloneimg1)
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-
-cloneimg2:
-7 objects in an object set, 28M
-3 full object sets
-min((100M % 28M) / 512K, 7) = 7 objects in the last object set
-28 objects in total
-
-  $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2
-  $ DEV=$(sudo rbd map cloneimg2)
-  $ hexdump $DEV
-  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ blkdiscard -l 100M $DEV
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-  $ DEV=$(sudo rbd map cloneimg2)
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-
-cloneimg3:
-23 objects in an object set, 92M
-1 full object set
-min((100M % 92M) / 512K, 23) = 16 objects in the last object set
-39 objects in total
-
-  $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3
-  $ DEV=$(sudo rbd map cloneimg3)
-  $ hexdump $DEV
-  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ blkdiscard -l 100M $DEV
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-  $ DEV=$(sudo rbd map cloneimg3)
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-
-cloneimg4:
-65 objects in an object set, 260M
-0 full object sets
-min((100M % 260M) / 512K, 65) = 65 objects in the last object set
-65 objects in total
-
-  $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4
-  $ DEV=$(sudo rbd map cloneimg4)
-  $ hexdump $DEV
-  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ blkdiscard -l 100M $DEV
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-  $ DEV=$(sudo rbd map cloneimg4)
-  $ hexdump $DEV
-  0000000 0000 0000 0000 0000 0000 0000 0000 0000
-  *
-  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
-  *
-  c800000
-  $ sudo rbd unmap $DEV
-
-  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1)
-  25
-  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2)
-  28
-  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3)
-  39
-  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4)
-  65
-
-  $ rbd rm --no-progress cloneimg4
-  $ rbd rm --no-progress cloneimg3
-  $ rbd rm --no-progress cloneimg2
-  $ rbd rm --no-progress cloneimg1
-  $ rbd snap unprotect img@snap
-  $ rbd snap rm --no-progress img@snap
-  $ rbd rm --no-progress img
diff --git a/qa/rbd/krbd_whole_object_zeroout.t b/qa/rbd/krbd_whole_object_zeroout.t
new file mode 100644 (file)
index 0000000..3530f93
--- /dev/null
@@ -0,0 +1,143 @@
+
+  $ get_block_name_prefix() {
+  >     rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']"
+  > }
+
+  $ rbd create --size 200M img
+  $ DEV=$(sudo rbd map img)
+  $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null
+  $ sudo rbd unmap $DEV
+  $ rbd snap create img@snap
+  $ rbd snap protect img@snap
+
+cloneimg1:
+1 object in an object set, 4M
+25 full object sets
+25 objects in total
+
+  $ rbd clone img@snap cloneimg1
+  $ DEV=$(sudo rbd map cloneimg1)
+  $ hexdump $DEV
+  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ fallocate -z -l 100M $DEV
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+  $ DEV=$(sudo rbd map cloneimg1)
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+
+cloneimg2:
+7 objects in an object set, 28M
+3 full object sets
+min((100M % 28M) / 512K, 7) = 7 objects in the last object set
+28 objects in total
+
+  $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2
+  $ DEV=$(sudo rbd map cloneimg2)
+  $ hexdump $DEV
+  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ fallocate -z -l 100M $DEV
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+  $ DEV=$(sudo rbd map cloneimg2)
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+
+cloneimg3:
+23 objects in an object set, 92M
+1 full object set
+min((100M % 92M) / 512K, 23) = 16 objects in the last object set
+39 objects in total
+
+  $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3
+  $ DEV=$(sudo rbd map cloneimg3)
+  $ hexdump $DEV
+  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ fallocate -z -l 100M $DEV
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+  $ DEV=$(sudo rbd map cloneimg3)
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+
+cloneimg4:
+65 objects in an object set, 260M
+0 full object sets
+min((100M % 260M) / 512K, 65) = 65 objects in the last object set
+65 objects in total
+
+  $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4
+  $ DEV=$(sudo rbd map cloneimg4)
+  $ hexdump $DEV
+  0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ fallocate -z -l 100M $DEV
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+  $ DEV=$(sudo rbd map cloneimg4)
+  $ hexdump $DEV
+  0000000 0000 0000 0000 0000 0000 0000 0000 0000
+  *
+  6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+  *
+  c800000
+  $ sudo rbd unmap $DEV
+
+  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1)
+  25
+  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2)
+  28
+  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3)
+  39
+  $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4)
+  65
+
+  $ rbd rm --no-progress cloneimg4
+  $ rbd rm --no-progress cloneimg3
+  $ rbd rm --no-progress cloneimg2
+  $ rbd rm --no-progress cloneimg1
+  $ rbd snap unprotect img@snap
+  $ rbd snap rm --no-progress img@snap
+  $ rbd rm --no-progress img
diff --git a/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml b/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml
deleted file mode 100644 (file)
index 9c558a3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-tasks:
-- cram:
-    clients:
-      client.0:
-      - qa/rbd/krbd_whole_object_discard.t
diff --git a/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml b/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml
new file mode 100644 (file)
index 0000000..3b0ff8d
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- cram:
+    clients:
+      client.0:
+      - qa/rbd/krbd_whole_object_zeroout.t
index cc95976659b7aa713e8e3d46d249b375ce9559db..e0b40937d316b8ef582944dd2ad12f0529018938 100644 (file)
@@ -1090,7 +1090,7 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len)
        int ret;
 
        /*
-        * BLKDISCARD goes straight to disk and doesn't do anything
+        * BLKZEROOUT goes straight to disk and doesn't do anything
         * about dirty buffers.  This means we need to flush so that
         *
         *   write 0..3M
@@ -1104,19 +1104,22 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len)
         *
         * returns "data 0000 data" rather than "data data data" in
         * case 1..2M was cached.
+        *
+         * Note: These cache coherency issues are supposed to be fixed
+         * in recent kernels.
         */
        ret = __krbd_flush(ctx, true);
        if (ret < 0)
                return ret;
 
        /*
-        * off and len must be 512-byte aligned, otherwise BLKDISCARD
+        * off and len must be 512-byte aligned, otherwise BLKZEROOUT
         * will fail with -EINVAL.  This means that -K (enable krbd
         * mode) requires -h 512 or similar.
         */
-       if (ioctl(ctx->krbd_fd, BLKDISCARD, &range) < 0) {
+       if (ioctl(ctx->krbd_fd, BLKZEROOUT, &range) < 0) {
                ret = -errno;
-               prt("BLKDISCARD(%llu, %llu) failed\n", off, len);
+               prt("BLKZEROOUT(%llu, %llu) failed\n", off, len);
                return ret;
        }