From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 24/24] iotests: Make 245 faster and more reliable
Date: Mon, 20 May 2019 18:14:53 +0200 [thread overview]
Message-ID: <20190520161453.30723-25-kwolf@redhat.com> (raw)
In-Reply-To: <20190520161453.30723-1-kwolf@redhat.com>
From: Max Reitz <mreitz@redhat.com>
Sometimes, 245 fails for me because some stream job has already finished
while the test expects it to still be active. (With -c none, it fails
basically every time.) The most reliable way to fix this is to simply
set auto_finalize=false so the job will remain in the block graph as
long as we need it. This allows us to drop the rate limiting, too,
which makes the test faster.
The only problem with this is that there is a single place that yields a
different error message depending on whether the stream job is still
copying data (so COR is enabled) or not (COR has been disabled, but the
job still has the WRITE_UNCHANGED permission on the target node). We
can easily address that by expecting either error message.
Note that we do not need auto_finalize=false (or rate limiting) for the
active commit job, because It never completes without an explicit
block-job-complete anyway.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
tests/qemu-iotests/245 | 22 ++++++++++++++--------
tests/qemu-iotests/245.out | 12 ++++++++++++
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/tests/qemu-iotests/245 b/tests/qemu-iotests/245
index a04c6235c1..349b94aace 100644
--- a/tests/qemu-iotests/245
+++ b/tests/qemu-iotests/245
@@ -862,7 +862,8 @@ class TestBlockdevReopen(iotests.QMPTestCase):
# hd2 <- hd0
result = self.vm.qmp('block-stream', conv_keys = True, job_id = 'stream0',
- device = 'hd0', base_node = 'hd2', speed = 512 * 1024)
+ device = 'hd0', base_node = 'hd2',
+ auto_finalize = False)
self.assert_qmp(result, 'return', {})
# We can't remove hd2 while the stream job is ongoing
@@ -873,7 +874,7 @@ class TestBlockdevReopen(iotests.QMPTestCase):
opts['backing'] = None
self.reopen(opts, {}, "Cannot change 'backing' link from 'hd0' to 'hd1'")
- self.wait_until_completed(drive = 'stream0')
+ self.vm.run_job('stream0', auto_finalize = False, auto_dismiss = True)
# Reopen the chain during a block-stream job (from hd2 to hd1)
def test_block_stream_4(self):
@@ -886,12 +887,16 @@ class TestBlockdevReopen(iotests.QMPTestCase):
# hd1 <- hd0
result = self.vm.qmp('block-stream', conv_keys = True, job_id = 'stream0',
- device = 'hd1', speed = 512 * 1024)
+ device = 'hd1', auto_finalize = False)
self.assert_qmp(result, 'return', {})
# We can't reopen with the original options because that would
# make hd1 read-only and block-stream requires it to be read-write
- self.reopen(opts, {}, "Can't set node 'hd1' to r/o with copy-on-read enabled")
+ # (Which error message appears depends on whether the stream job is
+ # already done with copying at this point.)
+ self.reopen(opts, {},
+ ["Can't set node 'hd1' to r/o with copy-on-read enabled",
+ "Cannot make block node read-only, there is a writer on it"])
# We can't remove hd2 while the stream job is ongoing
opts['backing']['backing'] = None
@@ -901,7 +906,7 @@ class TestBlockdevReopen(iotests.QMPTestCase):
opts['backing'] = None
self.reopen(opts)
- self.wait_until_completed(drive = 'stream0')
+ self.vm.run_job('stream0', auto_finalize = False, auto_dismiss = True)
# Reopen the chain during a block-commit job (from hd0 to hd2)
def test_block_commit_1(self):
@@ -913,7 +918,7 @@ class TestBlockdevReopen(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('block-commit', conv_keys = True, job_id = 'commit0',
- device = 'hd0', speed = 1024 * 1024)
+ device = 'hd0')
self.assert_qmp(result, 'return', {})
# We can't remove hd2 while the commit job is ongoing
@@ -944,7 +949,8 @@ class TestBlockdevReopen(iotests.QMPTestCase):
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('block-commit', conv_keys = True, job_id = 'commit0',
- device = 'hd0', top_node = 'hd1', speed = 1024 * 1024)
+ device = 'hd0', top_node = 'hd1',
+ auto_finalize = False)
self.assert_qmp(result, 'return', {})
# We can't remove hd2 while the commit job is ongoing
@@ -956,7 +962,7 @@ class TestBlockdevReopen(iotests.QMPTestCase):
self.reopen(opts, {}, "Cannot change backing link if 'hd0' has an implicit backing file")
# hd2 <- hd0
- self.wait_until_completed(drive = 'commit0')
+ self.vm.run_job('commit0', auto_finalize = False, auto_dismiss = True)
self.assert_qmp(self.get_node('hd0'), 'ro', False)
self.assertEqual(self.get_node('hd1'), None)
diff --git a/tests/qemu-iotests/245.out b/tests/qemu-iotests/245.out
index 71009c239f..a19de5214d 100644
--- a/tests/qemu-iotests/245.out
+++ b/tests/qemu-iotests/245.out
@@ -3,3 +3,15 @@
Ran 18 tests
OK
+{"execute": "job-finalize", "arguments": {"id": "commit0"}}
+{"return": {}}
+{"data": {"id": "commit0", "type": "commit"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "commit0", "len": 3145728, "offset": 3145728, "speed": 0, "type": "commit"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
+{"execute": "job-finalize", "arguments": {"id": "stream0"}}
+{"return": {}}
+{"data": {"id": "stream0", "type": "stream"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "stream0", "len": 3145728, "offset": 3145728, "speed": 0, "type": "stream"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
+{"execute": "job-finalize", "arguments": {"id": "stream0"}}
+{"return": {}}
+{"data": {"id": "stream0", "type": "stream"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "stream0", "len": 3145728, "offset": 3145728, "speed": 0, "type": "stream"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--
2.20.1
next prev parent reply other threads:[~2019-05-20 16:34 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-20 16:14 [Qemu-devel] [PULL 00/24] Block layer patches Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 01/24] block/file-posix: Truncate in xfs_write_zeroes() Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 02/24] qcow2: Define and use QCOW2_COMPRESSED_SECTOR_SIZE Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 03/24] block: Use BDRV_REQUEST_MAX_BYTES instead of BDRV_REQUEST_MAX_SECTORS Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 04/24] qmp: forbid qmp_cont in RUN_STATE_FINISH_MIGRATE Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 05/24] iotest: fix 169: do not run " Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 06/24] nvme: fix copy direction in DMA reads going to CMB Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 07/24] block: Add bdrv_try_set_aio_context() Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 08/24] block: Make bdrv_attach/detach_aio_context() static Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 09/24] block: Move recursion to bdrv_set_aio_context() Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 10/24] block: Propagate AioContext change to parents Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 11/24] test-block-iothread: Test AioContext propagation through the tree Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 12/24] block: Implement .(can_)set_aio_ctx for BlockBackend Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 13/24] block: Add blk_set_allow_aio_context_change() Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 14/24] blockjob: Propagate AioContext change to all job nodes Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 15/24] blockjob: Remove AioContext notifiers Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 16/24] test-block-iothread: Test AioContext propagation for block jobs Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 17/24] block/file-posix: Unaligned O_DIRECT block-status Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 18/24] iotests: Test unaligned raw images with O_DIRECT Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 19/24] qemu-img.texi: Be specific about JSON object types Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 20/24] qemu-img.texi: Describe human-readable info output Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 21/24] block: Improve "Block node is read-only" message Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 22/24] iotests.py: Let assert_qmp() accept an array Kevin Wolf
2019-05-20 16:14 ` [Qemu-devel] [PULL 23/24] iotests.py: Fix VM.run_job Kevin Wolf
2019-05-20 16:14 ` Kevin Wolf [this message]
2019-05-20 17:08 ` [Qemu-devel] [PULL 00/24] Block layer patches Peter Maydell
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=20190520161453.30723-25-kwolf@redhat.com \
--to=kwolf@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).