All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Alberto Garcia <berto@igalia.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 10/11] qemu-iotests: test block-stream operations in parallel
Date: Fri, 15 May 2015 10:53:21 +0800	[thread overview]
Message-ID: <20150515025321.GL28144@ad.nay.redhat.com> (raw)
In-Reply-To: <d40c9bcf9754f7da7203fbb7eaa117dd2ddb42c8.1431523498.git.berto@igalia.com>

On Wed, 05/13 16:27, Alberto Garcia wrote:
> This test case checks that it's possible to launch several stream
> operations in parallel in the same snapshot chain, each one involving
> a different set of nodes.
> 
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> Reviewed-by: Max Reitz <mreitz@redhat.com>

Reviewed-by: Fam Zheng <famz@redhat.com>

> ---
>  tests/qemu-iotests/030     | 80 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/030.out |  4 +--
>  2 files changed, 82 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030
> index 0927457..c199cef 100755
> --- a/tests/qemu-iotests/030
> +++ b/tests/qemu-iotests/030
> @@ -145,6 +145,86 @@ class TestSingleDrive(iotests.QMPTestCase):
>          self.assert_qmp(result, 'error/class', 'GenericError')
>  
>  
> +class TestParallelOps(iotests.QMPTestCase):
> +    image_len = 2 * 1024 * 1024 # MB
> +    num_ops = 4 # Number of parallel block-stream operations
> +    num_imgs = num_ops * 2 + 1
> +    imgs = []
> +
> +    def setUp(self):
> +        opts = []
> +        self.imgs = []
> +
> +        # Initialize file names and command-line options
> +        for i in range(self.num_imgs):
> +            img_depth = self.num_imgs - i - 1
> +            opts.append("backing." * img_depth + "node-name=node%d" % i)
> +            self.imgs.append(os.path.join(iotests.test_dir, 'img-%d.img' % i))
> +
> +        # Create all images
> +        iotests.create_image(self.imgs[0], self.image_len)
> +        for i in range(1, self.num_imgs):
> +            qemu_img('create', '-f', iotests.imgfmt,
> +                     '-o', 'backing_file=%s' % self.imgs[i-1], self.imgs[i])
> +
> +        # Put data into the images we are copying data from
> +        for i in range(1, self.num_imgs, 2):
> +            qemu_io('-f', iotests.imgfmt,
> +                    '-c', 'write -P %d %d 128K' % (i, i*128*1024), self.imgs[i])
> +
> +        # Attach the drive to the VM
> +        self.vm = iotests.VM()
> +        self.vm.add_drive("blkdebug::" + self.imgs[-1], ','.join(opts))
> +        self.vm.launch()
> +
> +    def tearDown(self):
> +        self.vm.shutdown()
> +        for img in self.imgs:
> +            os.remove(img)
> +
> +    # Test that it's possible to run several block-stream operations
> +    # in parallel in the same snapshot chain
> +    def test_stream_parallel(self):
> +        self.assert_no_active_block_jobs()
> +
> +        # Check that the maps don't match before the streaming operations
> +        for i in range(2, self.num_imgs, 2):
> +            self.assertNotEqual(qemu_io('-f', iotests.imgfmt, '-c', 'map', self.imgs[i]),
> +                                qemu_io('-f', iotests.imgfmt, '-c', 'map', self.imgs[i-1]),
> +                                'image file map matches backing file before streaming')
> +
> +        # Create all streaming jobs
> +        pending_jobs = []
> +        for i in range(2, self.num_imgs, 2):
> +            node_name = 'node%d' % i
> +            pending_jobs.append(node_name)
> +            result = self.vm.qmp('block-stream', device=node_name, base=self.imgs[i-2], speed=32768)
> +            self.assert_qmp(result, 'return', {})
> +
> +        # The block job on the active image is always referenced by
> +        # its device name. Therefore we have to replace the node name
> +        # with the device name in the list of pending jobs
> +        pending_jobs.pop()
> +        pending_jobs.append("drive0")
> +
> +        # Wait for all jobs to be finished.
> +        while len(pending_jobs) > 0:
> +            for event in self.vm.get_qmp_events(wait=True):
> +                if event['event'] == 'BLOCK_JOB_COMPLETED':
> +                    node_name = self.dictpath(event, 'data/device')
> +                    self.assertTrue(node_name in pending_jobs)
> +                    self.assert_qmp_absent(event, 'data/error')
> +                    pending_jobs.remove(node_name)
> +
> +        self.assert_no_active_block_jobs()
> +        self.vm.shutdown()
> +
> +        # Check that all maps match now
> +        for i in range(2, self.num_imgs, 2):
> +            self.assertEqual(qemu_io('-f', iotests.imgfmt, '-c', 'map', self.imgs[i]),
> +                             qemu_io('-f', iotests.imgfmt, '-c', 'map', self.imgs[i-1]),
> +                             'image file map does not match backing file after streaming')
> +
>  class TestSmallerBackingFile(iotests.QMPTestCase):
>      backing_len = 1 * 1024 * 1024 # MB
>      image_len = 2 * backing_len
> diff --git a/tests/qemu-iotests/030.out b/tests/qemu-iotests/030.out
> index 96961ed..b6f2576 100644
> --- a/tests/qemu-iotests/030.out
> +++ b/tests/qemu-iotests/030.out
> @@ -1,5 +1,5 @@
> -...............
> +................
>  ----------------------------------------------------------------------
> -Ran 15 tests
> +Ran 16 tests
>  
>  OK
> -- 
> 2.1.4
> 
> 

  reply	other threads:[~2015-05-15  2:54 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-13 13:27 [Qemu-devel] [PATCH v7 00/11] Support streaming to an intermediate layer Alberto Garcia
2015-05-13 13:27 ` [Qemu-devel] [PATCH 01/11] block: keep a list of block jobs Alberto Garcia
2015-05-15  2:11   ` Fam Zheng
2015-05-18 16:39   ` Max Reitz
2015-05-13 13:27 ` [Qemu-devel] [PATCH 02/11] block: allow block jobs in any arbitrary node Alberto Garcia
2015-05-15  2:19   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 03/11] block: never cancel a streaming job without running stream_complete() Alberto Garcia
2015-05-15  2:23   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 04/11] block: Support streaming to an intermediate layer Alberto Garcia
2015-05-15  2:33   ` Fam Zheng
2015-05-15  9:04     ` Alberto Garcia
2015-05-15  9:14       ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 05/11] block: Add QMP support for " Alberto Garcia
2015-05-15  2:38   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 06/11] docs: Document how to stream " Alberto Garcia
2015-05-15  2:42   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 07/11] qemu-iotests: fix test_stream_partial() Alberto Garcia
2015-05-15  2:43   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 08/11] qemu-iotests: add no-op streaming test Alberto Garcia
2015-05-15  2:44   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 09/11] qemu-iotests: test streaming to an intermediate layer Alberto Garcia
2015-05-15  2:45   ` Fam Zheng
2015-05-13 13:27 ` [Qemu-devel] [PATCH 10/11] qemu-iotests: test block-stream operations in parallel Alberto Garcia
2015-05-15  2:53   ` Fam Zheng [this message]
2015-05-13 13:27 ` [Qemu-devel] [PATCH 11/11] qemu-iotests: test overlapping block-stream operations Alberto Garcia
2015-05-15  2:56   ` Fam Zheng
2015-05-15  8:58     ` Alberto Garcia
2015-05-15  9:18       ` Fam Zheng
2015-06-16  8:51 ` [Qemu-devel] [PATCH v7 00/11] Support streaming to an intermediate layer Alberto Garcia
2015-06-18 10:45   ` [Qemu-devel] [Qemu-block] " Kevin Wolf
2015-06-18 11:41     ` Alberto Garcia
2015-06-18 11:47       ` Kevin Wolf
2015-06-18 12:07         ` Alberto Garcia
2015-06-18 12:36           ` Eric Blake
2015-06-18 12:55             ` Eric Blake
2015-06-19 10:09             ` Alberto Garcia
2015-06-22 16:17 ` [Qemu-devel] " Stefan Hajnoczi
  -- strict thread matches above, loose matches on Subject: below --
2015-04-24 15:01 [Qemu-devel] [PATCH v6 " Alberto Garcia
2015-04-24 15:01 ` [Qemu-devel] [PATCH 10/11] qemu-iotests: test block-stream operations in parallel Alberto Garcia
2015-04-24 11:40 [Qemu-devel] [PATCH v5 00/11] Support streaming to an intermediate layer Alberto Garcia
2015-04-24 11:40 ` [Qemu-devel] [PATCH 10/11] qemu-iotests: test block-stream operations in parallel Alberto Garcia
2015-04-24 13:35   ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150515025321.GL28144@ad.nay.redhat.com \
    --to=famz@redhat.com \
    --cc=berto@igalia.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.