Skip to content

Commit

Permalink
iotests: fix wait_until_completed()
Browse files Browse the repository at this point in the history
If there are more than one events, wait_until_completed() might return
the 2nd event even if the 1st event is JOB_COMPLETED, since the for loop
will continue to run even if completed is set to True.

It never happened before, but it can be triggered when OOB is enabled
due to the RESUME startup message. Fix that up.

Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20180408030542.17855-1-peterx@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
  • Loading branch information
xzpeter authored and ebblake committed Apr 10, 2018
1 parent fb4fe32 commit c398851
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions tests/qemu-iotests/iotests.py
Expand Up @@ -470,18 +470,15 @@ def cancel_and_wait(self, drive='drive0', force=False, resume=False):

def wait_until_completed(self, drive='drive0', check_offset=True):
'''Wait for a block job to finish, returning the event'''
completed = False
while not completed:
while True:
for event in self.vm.get_qmp_events(wait=True):
if event['event'] == 'BLOCK_JOB_COMPLETED':
self.assert_qmp(event, 'data/device', drive)
self.assert_qmp_absent(event, 'data/error')
if check_offset:
self.assert_qmp(event, 'data/offset', event['data']['len'])
completed = True

self.assert_no_active_block_jobs()
return event
self.assert_no_active_block_jobs()
return event

def wait_ready(self, drive='drive0'):
'''Wait until a block job BLOCK_JOB_READY event'''
Expand Down

0 comments on commit c398851

Please sign in to comment.