From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL 15/23] qemu-iotests: add 202 external snapshots IOThread test
Date: Mon, 18 Dec 2017 14:35:22 +0000 [thread overview]
Message-ID: <20171218143530.12082-16-stefanha@redhat.com> (raw)
In-Reply-To: <20171218143530.12082-1-stefanha@redhat.com>
QMP 'transaction' blockdev-snapshot-sync with multiple disks in an
IOThread is an untested code path. Several bugs have been found in
connection with this command. This patch adds a test case to prevent
future regressions.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20171206144550.22295-10-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
tests/qemu-iotests/202 | 95 ++++++++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/202.out | 11 ++++++
tests/qemu-iotests/group | 1 +
3 files changed, 107 insertions(+)
create mode 100755 tests/qemu-iotests/202
create mode 100644 tests/qemu-iotests/202.out
diff --git a/tests/qemu-iotests/202 b/tests/qemu-iotests/202
new file mode 100755
index 0000000000..581ca34d79
--- /dev/null
+++ b/tests/qemu-iotests/202
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2017 Red Hat, Inc.
+#
+# 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: Stefan Hajnoczi <stefanha@redhat.com>
+#
+# Check that QMP 'transaction' blockdev-snapshot-sync with multiple drives on a
+# single IOThread completes successfully. This particular command triggered a
+# hang due to recursive AioContext locking and BDRV_POLL_WHILE(). Protect
+# against regressions.
+
+import iotests
+
+iotests.verify_image_format(supported_fmts=['qcow2'])
+iotests.verify_platform(['linux'])
+
+with iotests.FilePath('disk0.img') as disk0_img_path, \
+ iotests.FilePath('disk1.img') as disk1_img_path, \
+ iotests.FilePath('disk0-snap.img') as disk0_snap_img_path, \
+ iotests.FilePath('disk1-snap.img') as disk1_snap_img_path, \
+ iotests.VM() as vm:
+
+ img_size = '10M'
+ iotests.qemu_img_pipe('create', '-f', iotests.imgfmt, disk0_img_path, img_size)
+ iotests.qemu_img_pipe('create', '-f', iotests.imgfmt, disk1_img_path, img_size)
+
+ iotests.log('Launching VM...')
+ vm.launch()
+
+ iotests.log('Adding IOThread...')
+ iotests.log(vm.qmp('object-add',
+ qom_type='iothread',
+ id='iothread0'))
+
+ iotests.log('Adding blockdevs...')
+ iotests.log(vm.qmp('blockdev-add',
+ driver=iotests.imgfmt,
+ node_name='disk0',
+ file={
+ 'driver': 'file',
+ 'filename': disk0_img_path,
+ }))
+ iotests.log(vm.qmp('blockdev-add',
+ driver=iotests.imgfmt,
+ node_name='disk1',
+ file={
+ 'driver': 'file',
+ 'filename': disk1_img_path,
+ }))
+
+ iotests.log('Setting iothread...')
+ iotests.log(vm.qmp('x-blockdev-set-iothread',
+ node_name='disk0',
+ iothread='iothread0'))
+ iotests.log(vm.qmp('x-blockdev-set-iothread',
+ node_name='disk1',
+ iothread='iothread0'))
+
+ iotests.log('Creating external snapshots...')
+ iotests.log(vm.qmp(
+ 'transaction',
+ actions=[
+ {
+ 'data': {
+ 'node-name': 'disk0',
+ 'snapshot-file': disk0_snap_img_path,
+ 'snapshot-node-name': 'disk0-snap',
+ 'mode': 'absolute-paths',
+ 'format': iotests.imgfmt,
+ },
+ 'type': 'blockdev-snapshot-sync'
+ }, {
+ 'data': {
+ 'node-name': 'disk1',
+ 'snapshot-file': disk1_snap_img_path,
+ 'snapshot-node-name': 'disk1-snap',
+ 'mode': 'absolute-paths',
+ 'format': iotests.imgfmt
+ },
+ 'type': 'blockdev-snapshot-sync'
+ }
+ ]))
diff --git a/tests/qemu-iotests/202.out b/tests/qemu-iotests/202.out
new file mode 100644
index 0000000000..d5ea374e17
--- /dev/null
+++ b/tests/qemu-iotests/202.out
@@ -0,0 +1,11 @@
+Launching VM...
+Adding IOThread...
+{u'return': {}}
+Adding blockdevs...
+{u'return': {}}
+{u'return': {}}
+Setting iothread...
+{u'return': {}}
+{u'return': {}}
+Creating external snapshots...
+{u'return': {}}
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 3e688678dd..d0ee1e2e55 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -197,3 +197,4 @@
197 rw auto quick
198 rw auto
200 rw auto
+202 rw auto quick
--
2.14.3
next prev parent reply other threads:[~2017-12-18 14:36 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-18 14:35 [Qemu-devel] [PULL 00/23] Block patches Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 01/23] coroutine: simplify co_aio_sleep_ns() prototype Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 02/23] hw/block/nvme: Convert to realize Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 03/23] hw/block: Fix the return type Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 04/23] hw/block: Use errp directly rather than local_err Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 05/23] dev-storage: Fix the unusual function name Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 06/23] qdev: drop unused #include "sysemu/iothread.h" Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 07/23] blockdev: hold AioContext for bdrv_unref() in external_snapshot_clean() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 08/23] block: don't keep AioContext acquired after external_snapshot_prepare() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 09/23] block: don't keep AioContext acquired after drive_backup_prepare() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 10/23] block: don't keep AioContext acquired after blockdev_backup_prepare() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 11/23] block: don't keep AioContext acquired after internal_snapshot_prepare() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 12/23] block: drop unused BlockDirtyBitmapState->aio_context field Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 13/23] iothread: add iothread_by_id() API Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 14/23] blockdev: add x-blockdev-set-iothread testing command Stefan Hajnoczi
2017-12-18 14:35 ` Stefan Hajnoczi [this message]
2017-12-18 14:35 ` [Qemu-devel] [PULL 16/23] virtio-blk: make queue size configurable Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 17/23] virtio-blk: reject configs with logical block size > physical block size Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 18/23] block: avoid recursive AioContext acquire in bdrv_inactivate_all() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 19/23] docs: mark nested AioContext locking as a legacy API Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 20/23] blockdev: add x-blockdev-set-iothread force boolean Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 21/23] iotests: add VM.add_object() Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 22/23] iothread: fix iothread_stop() race condition Stefan Hajnoczi
2017-12-18 14:35 ` [Qemu-devel] [PULL 23/23] qemu-iotests: add 203 savevm with IOThreads test Stefan Hajnoczi
2017-12-19 0:15 ` [Qemu-devel] [PULL 00/23] Block patches Peter Maydell
2017-12-19 9:15 ` Stefan Hajnoczi
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=20171218143530.12082-16-stefanha@redhat.com \
--to=stefanha@redhat.com \
--cc=peter.maydell@linaro.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.