Commit d9efe938 authored by Max Reitz's avatar Max Reitz
Browse files

iotests: Fix intermittent failure in 219



In 219, we wait for the job to make progress before we emit its status.
This makes the output reliable.  We do not wait for any more progress if
the job's current-progress already matches its total-progress.

Unfortunately, there is a bug: Right after the job has been started,
it's possible that total-progress is still 0.  In that case, we may skip
the first progress-making step and keep ending up 64 kB short.

To fix that bug, we can simply wait for total-progress to reach 4 MB
(the image size) after starting the job.

Reported-by: default avatarKaren Mezick <kmezick@redhat.com>
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1686651


Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20190516161114.27596-1-mreitz@redhat.com
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
[mreitz: Adjusted commit message as per John's proposal]
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent a3bd71b5
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import iotests

iotests.verify_image_format(supported_fmts=['qcow2'])

img_size = 4 * 1024 * 1024

def pause_wait(vm, job_id):
    with iotests.Timeout(3, "Timeout waiting for job to pause"):
        while True:
@@ -62,6 +64,8 @@ def test_pause_resume(vm):
                iotests.log(vm.qmp('query-jobs'))

def test_job_lifecycle(vm, job, job_args, has_ready=False):
    global img_size

    iotests.log('')
    iotests.log('')
    iotests.log('Starting block job: %s (auto-finalize: %s; auto-dismiss: %s)' %
@@ -84,6 +88,10 @@ def test_job_lifecycle(vm, job, job_args, has_ready=False):
    iotests.log(iotests.filter_qmp_event(vm.event_wait('JOB_STATUS_CHANGE')))
    iotests.log(iotests.filter_qmp_event(vm.event_wait('JOB_STATUS_CHANGE')))

    # Wait for total-progress to stabilize
    while vm.qmp('query-jobs')['return'][0]['total-progress'] < img_size:
        pass

    # RUNNING state:
    # pause/resume should work, complete/finalize/dismiss should error out
    iotests.log('')
@@ -173,9 +181,8 @@ with iotests.FilePath('disk.img') as disk_path, \
     iotests.FilePath('copy.img') as copy_path, \
     iotests.VM() as vm:

    img_size = '4M'
    iotests.qemu_img_create('-f', iotests.imgfmt, disk_path, img_size)
    iotests.qemu_io('-c', 'write 0 %s' % (img_size),
    iotests.qemu_img_create('-f', iotests.imgfmt, disk_path, str(img_size))
    iotests.qemu_io('-c', 'write 0 %i' % (img_size),
                    '-f', iotests.imgfmt, disk_path)

    iotests.log('Launching VM...')