qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PULL 04/20] iotests.py: rewrite run_job to be pickier
Date: Fri, 14 Jun 2019 15:40:05 +0200	[thread overview]
Message-ID: <20190614134021.32486-5-mreitz@redhat.com> (raw)
In-Reply-To: <20190614134021.32486-1-mreitz@redhat.com>

From: John Snow <jsnow@redhat.com>

Don't pull events out of the queue that don't belong to us;
be choosier so that we can use this method to drive jobs that
were launched by transactions that may have more jobs.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20190523170643.20794-5-jsnow@redhat.com
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/iotests.py | 48 +++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 6a3703e6ee..3ecef5bc90 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -543,27 +543,37 @@ class VM(qtest.QEMUQtestMachine):
     # Returns None on success, and an error string on failure
     def run_job(self, job, auto_finalize=True, auto_dismiss=False,
                 pre_finalize=None, wait=60.0):
+        match_device = {'data': {'device': job}}
+        match_id = {'data': {'id': job}}
+        events = [
+            ('BLOCK_JOB_COMPLETED', match_device),
+            ('BLOCK_JOB_CANCELLED', match_device),
+            ('BLOCK_JOB_ERROR', match_device),
+            ('BLOCK_JOB_READY', match_device),
+            ('BLOCK_JOB_PENDING', match_id),
+            ('JOB_STATUS_CHANGE', match_id)
+        ]
         error = None
         while True:
-            for ev in self.get_qmp_events_filtered(wait=wait):
-                if ev['event'] == 'JOB_STATUS_CHANGE':
-                    status = ev['data']['status']
-                    if status == 'aborting':
-                        result = self.qmp('query-jobs')
-                        for j in result['return']:
-                            if j['id'] == job:
-                                error = j['error']
-                                log('Job failed: %s' % (j['error']))
-                    elif status == 'pending' and not auto_finalize:
-                        if pre_finalize:
-                            pre_finalize()
-                        self.qmp_log('job-finalize', id=job)
-                    elif status == 'concluded' and not auto_dismiss:
-                        self.qmp_log('job-dismiss', id=job)
-                    elif status == 'null':
-                        return error
-                else:
-                    log(ev)
+            ev = filter_qmp_event(self.events_wait(events))
+            if ev['event'] != 'JOB_STATUS_CHANGE':
+                log(ev)
+                continue
+            status = ev['data']['status']
+            if status == 'aborting':
+                result = self.qmp('query-jobs')
+                for j in result['return']:
+                    if j['id'] == job:
+                        error = j['error']
+                        log('Job failed: %s' % (j['error']))
+            elif status == 'pending' and not auto_finalize:
+                if pre_finalize:
+                    pre_finalize()
+                self.qmp_log('job-finalize', id=job)
+            elif status == 'concluded' and not auto_dismiss:
+                self.qmp_log('job-dismiss', id=job)
+            elif status == 'null':
+                return error
 
     def node_info(self, node_name):
         nodes = self.qmp('query-named-block-nodes')
-- 
2.21.0



  parent reply	other threads:[~2019-06-14 13:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-14 13:40 [Qemu-devel] [PULL 00/20] Block patches Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 01/20] blockdev-backup: don't check aio_context too early Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 02/20] iotests.py: do not use infinite waits Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 03/20] QEMUMachine: add events_wait method Max Reitz
2019-06-14 13:40 ` Max Reitz [this message]
2019-06-14 13:40 ` [Qemu-devel] [PULL 05/20] iotests: add iotest 256 for testing blockdev-backup across iothread contexts Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 06/20] event_match: always match on None value Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 07/20] iotests: Filter 175's allocation information Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 08/20] iotests: Fix intermittent failure in 219 Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 09/20] hw/block/fdc: floppy command FIFO memory initialization Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 10/20] iotests: restrict 254 to support only qcow2 Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 11/20] qemu-img: Fix options leakage in img_rebase() Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 12/20] qapi/block-core: Overlays are not snapshots Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 13/20] blockdev: " Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 14/20] qemu-img: Move quiet into ImgConvertState Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 15/20] qemu-img: Add salvaging mode to convert Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 16/20] blkdebug: Add @iotype error option Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 17/20] blkdebug: Add "none" event Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 18/20] blkdebug: Inject errors on .bdrv_co_block_status() Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 19/20] iotests: Test qemu-img convert --salvage Max Reitz
2019-06-14 13:40 ` [Qemu-devel] [PULL 20/20] iotests: Test qemu-img convert -C --salvage Max Reitz
2019-06-14 14:51 ` [Qemu-devel] [PULL 00/20] Block 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=20190614134021.32486-5-mreitz@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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).