* [Qemu-devel] [PATCH v2 0/2] block: formalize and test fleecing @ 2018-06-28 18:00 John Snow 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source John Snow 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing John Snow 0 siblings, 2 replies; 11+ messages in thread From: John Snow @ 2018-06-28 18:00 UTC (permalink / raw) To: qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, eblake, Markus Armbruster, John Snow Formalize the fleecing workflow in patch one, test that it works in patch two. John Snow (2): block: allow blockdev-backup from any source iotests: add 222 to test basic fleecing blockdev.c | 2 +- tests/qemu-iotests/222 | 149 +++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/222.out | 60 ++++++++++++++++++ tests/qemu-iotests/group | 1 + 4 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 tests/qemu-iotests/222 create mode 100644 tests/qemu-iotests/222.out -- 2.14.4 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source 2018-06-28 18:00 [Qemu-devel] [PATCH v2 0/2] block: formalize and test fleecing John Snow @ 2018-06-28 18:00 ` John Snow 2018-06-28 18:05 ` Eric Blake 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing John Snow 1 sibling, 1 reply; 11+ messages in thread From: John Snow @ 2018-06-28 18:00 UTC (permalink / raw) To: qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, eblake, Markus Armbruster, John Snow In the case of image fleecing, the node we choose as the source for a blockdev-backup is going to be both a root node AND the backing node for the exported image. It does not qualify as a root image in this case. Loosen the restriction. Signed-off-by: John Snow <jsnow@redhat.com> --- blockdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blockdev.c b/blockdev.c index 58d7570932..526f8b60be 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3517,7 +3517,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn, backup->compress = false; } - bs = qmp_get_root_bs(backup->device, errp); + bs = bdrv_lookup_bs(backup->device, backup->device, errp); if (!bs) { return NULL; } -- 2.14.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source John Snow @ 2018-06-28 18:05 ` Eric Blake 2018-06-28 21:19 ` John Snow 0 siblings, 1 reply; 11+ messages in thread From: Eric Blake @ 2018-06-28 18:05 UTC (permalink / raw) To: John Snow, qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, Markus Armbruster On 06/28/2018 01:00 PM, John Snow wrote: > In the case of image fleecing, the node we choose as the source > for a blockdev-backup is going to be both a root node AND the > backing node for the exported image. It does not qualify as a root > image in this case. > > Loosen the restriction. > > Signed-off-by: John Snow <jsnow@redhat.com> > --- > blockdev.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) In v1, you mentioned that this used to work but then regressed, pinpointing that detail in the commit message might be nice, but not essential (since we didn't test it until now). So, Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source 2018-06-28 18:05 ` Eric Blake @ 2018-06-28 21:19 ` John Snow 2018-07-02 7:59 ` Kashyap Chamarthy 0 siblings, 1 reply; 11+ messages in thread From: John Snow @ 2018-06-28 21:19 UTC (permalink / raw) To: Eric Blake, qemu-devel, qemu-block Cc: Kevin Wolf, Markus Armbruster, Max Reitz, Kashyap Chamarthy On 06/28/2018 02:05 PM, Eric Blake wrote: > On 06/28/2018 01:00 PM, John Snow wrote: >> In the case of image fleecing, the node we choose as the source >> for a blockdev-backup is going to be both a root node AND the >> backing node for the exported image. It does not qualify as a root >> image in this case. >> >> Loosen the restriction. >> >> Signed-off-by: John Snow <jsnow@redhat.com> >> --- >> blockdev.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) > > In v1, you mentioned that this used to work but then regressed, > pinpointing that detail in the commit message might be nice, but not > essential (since we didn't test it until now). So, > Really not sure when it regressed; I consider it unimportant as nothing uses it presently: no docs, no tests, nothing in libvirt. My guess, though, is that it worked prior to cef34eebf3d0f252a3b3e9a2a459b6c3ecc56f68. In 2.8, possibly? Kashyap might know, I think he's experimented with this sometime in that timezone. > Reviewed-by: Eric Blake <eblake@redhat.com> > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source 2018-06-28 21:19 ` John Snow @ 2018-07-02 7:59 ` Kashyap Chamarthy 2018-07-02 18:13 ` John Snow 0 siblings, 1 reply; 11+ messages in thread From: Kashyap Chamarthy @ 2018-07-02 7:59 UTC (permalink / raw) To: John Snow Cc: Eric Blake, qemu-devel, qemu-block, Kevin Wolf, Markus Armbruster, Max Reitz On Thu, Jun 28, 2018 at 05:19:37PM -0400, John Snow wrote: > > > On 06/28/2018 02:05 PM, Eric Blake wrote: > > On 06/28/2018 01:00 PM, John Snow wrote: > >> In the case of image fleecing, the node we choose as the source > >> for a blockdev-backup is going to be both a root node AND the > >> backing node for the exported image. It does not qualify as a root > >> image in this case. > >> > >> Loosen the restriction. > >> > >> Signed-off-by: John Snow <jsnow@redhat.com> > >> --- > >> blockdev.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > > > > In v1, you mentioned that this used to work but then regressed, > > pinpointing that detail in the commit message might be nice, but not > > essential (since we didn't test it until now). So, > > > > Really not sure when it regressed; I consider it unimportant as nothing > uses it presently: no docs, no tests, nothing in libvirt. > > My guess, though, is that it worked prior to > cef34eebf3d0f252a3b3e9a2a459b6c3ecc56f68. So the above commit adds the ability to assign node names for `blockdev-backup`, which wasn't possible during 2.8 timeframe. > In 2.8, possibly? > > Kashyap might know, I think he's experimented with this sometime in that > timezone. I don't recall doing the "allow blockdev-backup from any source" test with 2.8. (But I recall gradually moving from figuring out the source block device via wading through the output of `query-named-block-nodes` to using the 'node-name'.) Looking at my test notes with QEMU 2.8, this was my workflow (see how `blockdev-backup` still doesn't use 'node-name's): (QEMU) blockdev-add driver=qcow2 node-name=node2 file={"driver":"file","filename":"/export/target.qcow2"} backing={"driver":"qcow2","file":{"driver":"file","filename":"/export/base.qcow2"}} (QEMU) query-named-block-nodes # To dig through the source block device "#blockYYY" (QEMU) blockdev-backup device=#block197 target=node1 sync=none (QEMU) nbd-server-start addr={"type":"unix","data":{"path":"./nbd-sock"}} (QEMU) nbd-server-add device=node1 (QEMU) nbd-server-stop Later on I moved (thanks to the Git commit you mentioned earlier) to the much cleaner approach of using 'node-name' (the below syntax is from my test notes with QEMU 2.12): (QEMU) blockdev-add driver=qcow2 node-name=node-E file={"driver":"file","filename":"e.qcow2"} (QEMU) blockdev-backup device=node-B target=node-E sync=full job-id=job0 [...] -- /kashyap ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source 2018-07-02 7:59 ` Kashyap Chamarthy @ 2018-07-02 18:13 ` John Snow 0 siblings, 0 replies; 11+ messages in thread From: John Snow @ 2018-07-02 18:13 UTC (permalink / raw) To: Kashyap Chamarthy Cc: Eric Blake, qemu-devel, qemu-block, Kevin Wolf, Markus Armbruster, Max Reitz On 07/02/2018 03:59 AM, Kashyap Chamarthy wrote: > On Thu, Jun 28, 2018 at 05:19:37PM -0400, John Snow wrote: >> >> >> On 06/28/2018 02:05 PM, Eric Blake wrote: >>> On 06/28/2018 01:00 PM, John Snow wrote: >>>> In the case of image fleecing, the node we choose as the source >>>> for a blockdev-backup is going to be both a root node AND the >>>> backing node for the exported image. It does not qualify as a root >>>> image in this case. >>>> >>>> Loosen the restriction. >>>> >>>> Signed-off-by: John Snow <jsnow@redhat.com> >>>> --- >>>> blockdev.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> In v1, you mentioned that this used to work but then regressed, >>> pinpointing that detail in the commit message might be nice, but not >>> essential (since we didn't test it until now). So, >>> >> >> Really not sure when it regressed; I consider it unimportant as nothing >> uses it presently: no docs, no tests, nothing in libvirt. >> >> My guess, though, is that it worked prior to >> cef34eebf3d0f252a3b3e9a2a459b6c3ecc56f68. > > So the above commit adds the ability to assign node names for > `blockdev-backup`, which wasn't possible during 2.8 timeframe. > >> In 2.8, possibly? >> >> Kashyap might know, I think he's experimented with this sometime in that >> timezone. > > I don't recall doing the "allow blockdev-backup from any source" test > with 2.8. (But I recall gradually moving from figuring out the source > block device via wading through the output of `query-named-block-nodes` > to using the 'node-name'.) > > Looking at my test notes with QEMU 2.8, this was my > workflow (see how `blockdev-backup` still doesn't use 'node-name's): > > (QEMU) blockdev-add driver=qcow2 node-name=node2 file={"driver":"file","filename":"/export/target.qcow2"} backing={"driver":"qcow2","file":{"driver":"file","filename":"/export/base.qcow2"}} > (QEMU) query-named-block-nodes # To dig through the source block device "#blockYYY" > (QEMU) blockdev-backup device=#block197 target=node1 sync=none > (QEMU) nbd-server-start addr={"type":"unix","data":{"path":"./nbd-sock"}} > (QEMU) nbd-server-add device=node1 > (QEMU) nbd-server-stop > > Later on I moved (thanks to the Git commit you mentioned earlier) to the > much cleaner approach of using 'node-name' (the below syntax is > from my test notes with QEMU 2.12): > > (QEMU) blockdev-add driver=qcow2 node-name=node-E file={"driver":"file","filename":"e.qcow2"} > (QEMU) blockdev-backup device=node-B target=node-E sync=full job-id=job0 > [...] > Without this patch, "allow blockdev-backup from any source", the fleecing workflow prohibits the blockdev-backup command. We're wondering when that regressed. If you managed to get fleecing working without this patch here, then it was working at that time. --js ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing 2018-06-28 18:00 [Qemu-devel] [PATCH v2 0/2] block: formalize and test fleecing John Snow 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source John Snow @ 2018-06-28 18:00 ` John Snow 2018-06-28 18:10 ` Eric Blake 2018-06-28 18:17 ` Eric Blake 1 sibling, 2 replies; 11+ messages in thread From: John Snow @ 2018-06-28 18:00 UTC (permalink / raw) To: qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, eblake, Markus Armbruster, John Snow Signed-off-by: John Snow <jsnow@redhat.com> --- tests/qemu-iotests/222 | 149 +++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/222.out | 60 ++++++++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 210 insertions(+) create mode 100644 tests/qemu-iotests/222 create mode 100644 tests/qemu-iotests/222.out diff --git a/tests/qemu-iotests/222 b/tests/qemu-iotests/222 new file mode 100644 index 0000000000..4a1bf1fba3 --- /dev/null +++ b/tests/qemu-iotests/222 @@ -0,0 +1,149 @@ +#!/usr/bin/env python +# +# This test covers the basic fleecing workflow, which provides a +# point-in-time snapshot of a node that can be queried over NBD. +# +# Copyright (C) 2018 Red Hat, Inc. +# John helped, too. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Creator/Owner: John Snow <jsnow@redhat.com> + +import iotests +from iotests import log, qemu_img, qemu_io, qemu_io_silent + +iotests.verify_platform(['linux']) + +patterns = [("0x5d", "0", "64k"), + ("0xd5", "1M", "64k"), + ("0xdc", "32M", "64k"), + ("0xcd", "0x3ff0000", "64k")] # 64M - 64K + +overwrite = [("0xab", "0", "64k"), # Full overwrite + ("0xad", "0x00f8000", "64k"), # Partial-left (1M-32K) + ("0x1d", "0x2008000", "64k"), # Partial-right (32M+32K) + ("0xea", "0x3fe0000", "64k")] # Adjacent-left (64M - 128K) + +remainder = [("0xd5", "0x108000", "32K"), # Right-end of partial-left [1] + ("0xdc", "32M", "32k"), # Left-end of partial-right [2] + ("0xcd", "0x3ff0000", "64k")] # patterns[3] + +with iotests.FilePath('base.img') as base_img_path, \ + iotests.FilePath('fleece.img') as fleece_img_path, \ + iotests.FilePath('nbd.sock') as nbd_sock_path, \ + iotests.VM() as vm: + + log('--- Setting up images ---') + log('') + + assert qemu_img('create', '-f', iotests.imgfmt, base_img_path, '64M') == 0 + assert qemu_img('create', '-f', "qcow2", fleece_img_path, '64M') == 0 + + for p in patterns: + qemu_io('-c', 'write -P%s %s %s' % p, base_img_path) + + log('Done') + + log('') + log('--- Launching VM ---') + log('') + + vm.add_drive(base_img_path) + vm.launch() + log('Done') + + log('') + log('--- Setting up Fleecing Graph ---') + log('') + + srcNode = "drive0" + tgtNode = "fleeceNode" + + # create tgtNode backed by srcNode + log(vm.qmp("blockdev-add", **{ + "driver": "qcow2", + "node-name": tgtNode, + "file": { + "driver": "file", + "filename": fleece_img_path, + }, + "backing": srcNode, + })) + + # Establish COW from source to fleecing node + log(vm.qmp("blockdev-backup", + device=srcNode, + target=tgtNode, + sync="none")) + + log('') + log('--- Setting up NBD Export ---') + log('') + + nbd_uri = 'nbd+unix:///%s?socket=%s' % (tgtNode, nbd_sock_path) + log(vm.qmp("nbd-server-start", + **{"addr": { "type": "unix", + "data": { "path": nbd_sock_path } } })) + + log(vm.qmp("nbd-server-add", device=tgtNode)) + + log('') + log('--- Sanity Check ---') + log('') + + for p in patterns: + cmd = "read -P%s %s %s" % p + log(cmd) + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 + + log('') + log('--- Testing COW ---') + log('') + + for p in overwrite: + cmd = "write -P%s %s %s" % p + log(cmd) + log(vm.hmp_qemu_io(srcNode, cmd)) + + log('') + log('--- Verifying Data ---') + log('') + + for p in patterns: + cmd = "read -P%s %s %s" % p + log(cmd) + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 + + log('') + log('--- Cleanup ---') + log('') + + #log(vm.hmp_qemu_io(srcNode, 'flush')) + log(vm.qmp('block-job-cancel', device=srcNode)) + log(vm.qmp('nbd-server-stop')) + log(vm.qmp('blockdev-del', node_name=tgtNode)) + vm.shutdown() + + log('') + log('--- Confirming writes ---') + log('') + + for p in (overwrite + remainder): + cmd = "read -P%s %s %s" % p + log(cmd) + assert qemu_io_silent(base_img_path, '-c', cmd) == 0 + + log('') + log('Done') diff --git a/tests/qemu-iotests/222.out b/tests/qemu-iotests/222.out new file mode 100644 index 0000000000..533fb6bc61 --- /dev/null +++ b/tests/qemu-iotests/222.out @@ -0,0 +1,60 @@ +--- Setting up images --- + +Done + +--- Launching VM --- + +Done + +--- Setting up Fleecing Graph --- + +{u'return': {}} +{u'return': {}} + +--- Setting up NBD Export --- + +{u'return': {}} +{u'return': {}} + +--- Sanity Check --- + +read -P0x5d 0 64k +read -P0xd5 1M 64k +read -P0xdc 32M 64k +read -P0xcd 0x3ff0000 64k + +--- Testing COW --- + +write -P0xab 0 64k +{u'return': u''} +write -P0xad 0x00f8000 64k +{u'return': u''} +write -P0x1d 0x2008000 64k +{u'return': u''} +write -P0xea 0x3fe0000 64k +{u'return': u''} + +--- Verifying Data --- + +read -P0x5d 0 64k +read -P0xd5 1M 64k +read -P0xdc 32M 64k +read -P0xcd 0x3ff0000 64k + +--- Cleanup --- + +{u'return': {}} +{u'return': {}} +{u'return': {}} + +--- Confirming writes --- + +read -P0xab 0 64k +read -P0xad 0x00f8000 64k +read -P0x1d 0x2008000 64k +read -P0xea 0x3fe0000 64k +read -P0xd5 0x108000 32K +read -P0xdc 32M 32k +read -P0xcd 0x3ff0000 64k + +Done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index eea75819d2..8019a9f721 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -220,3 +220,4 @@ 218 rw auto quick 219 rw auto 221 rw auto quick +222 rw auto quick -- 2.14.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing John Snow @ 2018-06-28 18:10 ` Eric Blake 2018-06-28 18:31 ` John Snow 2018-06-28 18:17 ` Eric Blake 1 sibling, 1 reply; 11+ messages in thread From: Eric Blake @ 2018-06-28 18:10 UTC (permalink / raw) To: John Snow, qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, Markus Armbruster On 06/28/2018 01:00 PM, John Snow wrote: > Signed-off-by: John Snow <jsnow@redhat.com> > --- > tests/qemu-iotests/222 | 149 +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/222.out | 60 ++++++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 210 insertions(+) > create mode 100644 tests/qemu-iotests/222 > create mode 100644 tests/qemu-iotests/222.out > > + > + log('') > + log('--- Cleanup ---') > + log('') > + > + #log(vm.hmp_qemu_io(srcNode, 'flush')) > + log(vm.qmp('block-job-cancel', device=srcNode)) Is the commented line still worthwhile to keep? > + log(vm.qmp('nbd-server-stop')) > + log(vm.qmp('blockdev-del', node_name=tgtNode)) > + vm.shutdown() > + > + log('') > + log('--- Confirming writes ---') > + log('') > + > + for p in (overwrite + remainder): > + cmd = "read -P%s %s %s" % p > + log(cmd) > + assert qemu_io_silent(base_img_path, '-c', cmd) == 0 > + Thanks for the additions compared to v1 (including the previously missing .out file ;) Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing 2018-06-28 18:10 ` Eric Blake @ 2018-06-28 18:31 ` John Snow 0 siblings, 0 replies; 11+ messages in thread From: John Snow @ 2018-06-28 18:31 UTC (permalink / raw) To: Eric Blake, qemu-devel, qemu-block Cc: Kevin Wolf, Markus Armbruster, Max Reitz On 06/28/2018 02:10 PM, Eric Blake wrote: > On 06/28/2018 01:00 PM, John Snow wrote: >> Signed-off-by: John Snow <jsnow@redhat.com> >> --- >> tests/qemu-iotests/222 | 149 >> +++++++++++++++++++++++++++++++++++++++++++++ >> tests/qemu-iotests/222.out | 60 ++++++++++++++++++ >> tests/qemu-iotests/group | 1 + >> 3 files changed, 210 insertions(+) >> create mode 100644 tests/qemu-iotests/222 >> create mode 100644 tests/qemu-iotests/222.out >> > >> + >> + log('') >> + log('--- Cleanup ---') >> + log('') >> + >> + #log(vm.hmp_qemu_io(srcNode, 'flush')) >> + log(vm.qmp('block-job-cancel', device=srcNode)) > > Is the commented line still worthwhile to keep? NUTS. > >> + log(vm.qmp('nbd-server-stop')) >> + log(vm.qmp('blockdev-del', node_name=tgtNode)) >> + vm.shutdown() >> + >> + log('') >> + log('--- Confirming writes ---') >> + log('') >> + >> + for p in (overwrite + remainder): >> + cmd = "read -P%s %s %s" % p >> + log(cmd) >> + assert qemu_io_silent(base_img_path, '-c', cmd) == 0 >> + > > Thanks for the additions compared to v1 (including the previously > missing .out file ;) > Reviewed-by: Eric Blake <eblake@redhat.com> > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing John Snow 2018-06-28 18:10 ` Eric Blake @ 2018-06-28 18:17 ` Eric Blake 2018-06-28 18:30 ` John Snow 1 sibling, 1 reply; 11+ messages in thread From: Eric Blake @ 2018-06-28 18:17 UTC (permalink / raw) To: John Snow, qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, Markus Armbruster On 06/28/2018 01:00 PM, John Snow wrote: > Signed-off-by: John Snow <jsnow@redhat.com> > --- > tests/qemu-iotests/222 | 149 +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/222.out | 60 ++++++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 210 insertions(+) > create mode 100644 tests/qemu-iotests/222 > create mode 100644 tests/qemu-iotests/222.out > > +iotests.verify_platform(['linux']) > + > +patterns = [("0x5d", "0", "64k"), > + ("0xd5", "1M", "64k"), > + ("0xdc", "32M", "64k"), > + ("0xcd", "0x3ff0000", "64k")] # 64M - 64K > + > +overwrite = [("0xab", "0", "64k"), # Full overwrite > + ("0xad", "0x00f8000", "64k"), # Partial-left (1M-32K) > + ("0x1d", "0x2008000", "64k"), # Partial-right (32M+32K) > + ("0xea", "0x3fe0000", "64k")] # Adjacent-left (64M - 128K) > + > +remainder = [("0xd5", "0x108000", "32K"), # Right-end of partial-left [1] > + ("0xdc", "32M", "32k"), # Left-end of partial-right [2] > + ("0xcd", "0x3ff0000", "64k")] # patterns[3] What if you also add: zeroes = [("0x00", "0x108000", "32K"), # Right-end of partial-left [1] ("0x00", "32M", "32k"), # Left-end of partial-right [2] ("0x00", "0x3ff0000", "64k")] # patterns[3] then... > + log('') > + log('--- Sanity Check ---') > + log('') > + > + for p in patterns: for p in (patterns + zeroes) > + cmd = "read -P%s %s %s" % p > + log(cmd) > + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 > + > + log('') > + log('--- Testing COW ---') > + log('') > + > + for p in overwrite: > + cmd = "write -P%s %s %s" % p > + log(cmd) > + log(vm.hmp_qemu_io(srcNode, cmd)) > + > + log('') > + log('--- Verifying Data ---') > + log('') > + > + for p in patterns: for p in (patterns + zeroes) > + cmd = "read -P%s %s %s" % p > + log(cmd) > + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) == 0 > + > + log('') > + log('--- Cleanup ---') > + log('') > + > + #log(vm.hmp_qemu_io(srcNode, 'flush')) > + log(vm.qmp('block-job-cancel', device=srcNode)) > + log(vm.qmp('nbd-server-stop')) > + log(vm.qmp('blockdev-del', node_name=tgtNode)) > + vm.shutdown() > + > + log('') > + log('--- Confirming writes ---') > + log('') > + > + for p in (overwrite + remainder): so that reads of both the fleeced point in time and of the final image cover the same set of byte ranges. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing 2018-06-28 18:17 ` Eric Blake @ 2018-06-28 18:30 ` John Snow 0 siblings, 0 replies; 11+ messages in thread From: John Snow @ 2018-06-28 18:30 UTC (permalink / raw) To: Eric Blake, qemu-devel, qemu-block Cc: Max Reitz, Kevin Wolf, Markus Armbruster On 06/28/2018 02:17 PM, Eric Blake wrote: > On 06/28/2018 01:00 PM, John Snow wrote: >> Signed-off-by: John Snow <jsnow@redhat.com> >> --- >> tests/qemu-iotests/222 | 149 >> +++++++++++++++++++++++++++++++++++++++++++++ >> tests/qemu-iotests/222.out | 60 ++++++++++++++++++ >> tests/qemu-iotests/group | 1 + >> 3 files changed, 210 insertions(+) >> create mode 100644 tests/qemu-iotests/222 >> create mode 100644 tests/qemu-iotests/222.out >> > >> +iotests.verify_platform(['linux']) >> + >> +patterns = [("0x5d", "0", "64k"), >> + ("0xd5", "1M", "64k"), >> + ("0xdc", "32M", "64k"), >> + ("0xcd", "0x3ff0000", "64k")] # 64M - 64K >> + >> +overwrite = [("0xab", "0", "64k"), # Full overwrite >> + ("0xad", "0x00f8000", "64k"), # Partial-left (1M-32K) >> + ("0x1d", "0x2008000", "64k"), # Partial-right (32M+32K) >> + ("0xea", "0x3fe0000", "64k")] # Adjacent-left (64M - 128K) >> + >> +remainder = [("0xd5", "0x108000", "32K"), # Right-end of >> partial-left [1] >> + ("0xdc", "32M", "32k"), # Left-end of >> partial-right [2] >> + ("0xcd", "0x3ff0000", "64k")] # patterns[3] > > What if you also add: > > zeroes = [("0x00", "0x108000", "32K"), # Right-end of partial-left [1] > ("0x00", "32M", "32k"), # Left-end of partial-right [2] > ("0x00", "0x3ff0000", "64k")] # patterns[3] > > then... > >> + log('') >> + log('--- Sanity Check ---') >> + log('') >> + >> + for p in patterns: > > for p in (patterns + zeroes) > >> + cmd = "read -P%s %s %s" % p >> + log(cmd) >> + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) >> == 0 >> + >> + log('') >> + log('--- Testing COW ---') >> + log('') >> + >> + for p in overwrite: >> + cmd = "write -P%s %s %s" % p >> + log(cmd) >> + log(vm.hmp_qemu_io(srcNode, cmd)) >> + >> + log('') >> + log('--- Verifying Data ---') >> + log('') >> + >> + for p in patterns: > > for p in (patterns + zeroes) > >> + cmd = "read -P%s %s %s" % p >> + log(cmd) >> + assert qemu_io_silent('-r', '-f', 'raw', '-c', cmd, nbd_uri) >> == 0 >> + >> + log('') >> + log('--- Cleanup ---') >> + log('') >> + >> + #log(vm.hmp_qemu_io(srcNode, 'flush')) >> + log(vm.qmp('block-job-cancel', device=srcNode)) >> + log(vm.qmp('nbd-server-stop')) >> + log(vm.qmp('blockdev-del', node_name=tgtNode)) >> + vm.shutdown() >> + >> + log('') >> + log('--- Confirming writes ---') >> + log('') >> + >> + for p in (overwrite + remainder): > > so that reads of both the fleeced point in time and of the final image > cover the same set of byte ranges. > Sure, why not. --js ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2018-07-02 18:13 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-06-28 18:00 [Qemu-devel] [PATCH v2 0/2] block: formalize and test fleecing John Snow 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 1/2] block: allow blockdev-backup from any source John Snow 2018-06-28 18:05 ` Eric Blake 2018-06-28 21:19 ` John Snow 2018-07-02 7:59 ` Kashyap Chamarthy 2018-07-02 18:13 ` John Snow 2018-06-28 18:00 ` [Qemu-devel] [PATCH v2 2/2] iotests: add 222 to test basic fleecing John Snow 2018-06-28 18:10 ` Eric Blake 2018-06-28 18:31 ` John Snow 2018-06-28 18:17 ` Eric Blake 2018-06-28 18:30 ` John Snow
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.