26ba25
From 6839f724393417ae25f3b5ab8bd85bf067925cc2 Mon Sep 17 00:00:00 2001
26ba25
From: Kevin Wolf <kwolf@redhat.com>
26ba25
Date: Tue, 26 Jun 2018 09:48:55 +0200
26ba25
Subject: [PATCH 147/268] iotests: Fix 219's timing
26ba25
26ba25
RH-Author: Kevin Wolf <kwolf@redhat.com>
26ba25
Message-id: <20180626094856.6924-73-kwolf@redhat.com>
26ba25
Patchwork-id: 81111
26ba25
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 72/73] iotests: Fix 219's timing
26ba25
Bugzilla: 1513543
26ba25
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
26ba25
RH-Acked-by: Max Reitz <mreitz@redhat.com>
26ba25
RH-Acked-by: Fam Zheng <famz@redhat.com>
26ba25
26ba25
From: Max Reitz <mreitz@redhat.com>
26ba25
26ba25
219 has two issues that may lead to sporadic failure, both of which are
26ba25
the result of issuing query-jobs too early after a job has been
26ba25
modified.  This can then lead to different results based on whether the
26ba25
modification has taken effect already or not.
26ba25
26ba25
First, query-jobs is issued right after the job has been created.
26ba25
Besides its current progress possibly being in any random state (which
26ba25
has already been taken care of), its total progress too is basically
26ba25
arbitrary, because the job may not yet have been able to determine it.
26ba25
This patch addresses this by just filtering the total progress, like
26ba25
what has been done for the current progress already.  However, for more
26ba25
clarity, the filtering is changed to replace the values by a string
26ba25
'FILTERED' instead of deleting them.
26ba25
26ba25
Secondly, query-jobs is issued right after a job has been resumed.  The
26ba25
job may or may not yet have had the time to actually perform any I/O,
26ba25
and thus its current progress may or may not have advanced.  To make
26ba25
sure it has indeed advanced (which is what the reference output already
26ba25
assumes), keep querying it until it has.
26ba25
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
Message-id: 20180606190628.8170-1-mreitz@redhat.com
26ba25
Reviewed-by: Eric Blake <eblake@redhat.com>
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
(cherry picked from commit 83f90b535a0d5e64056c087aa4022ea35c59bcd0)
26ba25
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
26ba25
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
26ba25
---
26ba25
 tests/qemu-iotests/219     | 26 ++++++++++++++++++++------
26ba25
 tests/qemu-iotests/219.out | 10 +++++-----
26ba25
 2 files changed, 25 insertions(+), 11 deletions(-)
26ba25
26ba25
diff --git a/tests/qemu-iotests/219 b/tests/qemu-iotests/219
26ba25
index 898a26e..c03bbdb 100755
26ba25
--- a/tests/qemu-iotests/219
26ba25
+++ b/tests/qemu-iotests/219
26ba25
@@ -42,11 +42,24 @@ def test_pause_resume(vm):
26ba25
             iotests.log(vm.qmp(pause_cmd, **{pause_arg: 'job0'}))
26ba25
             pause_wait(vm, 'job0')
26ba25
             iotests.log(iotests.filter_qmp_event(vm.event_wait('JOB_STATUS_CHANGE')))
26ba25
-            iotests.log(vm.qmp('query-jobs'))
26ba25
+            result = vm.qmp('query-jobs')
26ba25
+            iotests.log(result)
26ba25
+
26ba25
+            old_progress = result['return'][0]['current-progress']
26ba25
+            total_progress = result['return'][0]['total-progress']
26ba25
 
26ba25
             iotests.log(vm.qmp(resume_cmd, **{resume_arg: 'job0'}))
26ba25
             iotests.log(iotests.filter_qmp_event(vm.event_wait('JOB_STATUS_CHANGE')))
26ba25
-            iotests.log(vm.qmp('query-jobs'))
26ba25
+            if old_progress < total_progress:
26ba25
+                # Wait for the job to advance
26ba25
+                while result['return'][0]['current-progress'] == old_progress:
26ba25
+                    result = vm.qmp('query-jobs')
26ba25
+                iotests.log(result)
26ba25
+            else:
26ba25
+                # Already reached the end, so the job cannot advance
26ba25
+                # any further; therefore, the query-jobs result can be
26ba25
+                # logged immediately
26ba25
+                iotests.log(vm.qmp('query-jobs'))
26ba25
 
26ba25
 def test_job_lifecycle(vm, job, job_args, has_ready=False):
26ba25
     iotests.log('')
26ba25
@@ -58,12 +71,13 @@ def test_job_lifecycle(vm, job, job_args, has_ready=False):
26ba25
     iotests.log(vm.qmp(job, job_id='job0', **job_args))
26ba25
 
26ba25
     # Depending on the storage, the first request may or may not have completed
26ba25
-    # yet, so filter out the progress. Later query-job calls don't need the
26ba25
-    # filtering because the progress is made deterministic by the block job
26ba25
-    # speed
26ba25
+    # yet (and the total progress may not have been fully determined yet), so
26ba25
+    # filter out the progress. Later query-job calls don't need the filtering
26ba25
+    # because the progress is made deterministic by the block job speed
26ba25
     result = vm.qmp('query-jobs')
26ba25
     for j in result['return']:
26ba25
-        del j['current-progress']
26ba25
+        j['current-progress'] = 'FILTERED'
26ba25
+        j['total-progress'] = 'FILTERED'
26ba25
     iotests.log(result)
26ba25
 
26ba25
     # undefined -> created -> running
26ba25
diff --git a/tests/qemu-iotests/219.out b/tests/qemu-iotests/219.out
26ba25
index 346801b..6dc07bc 100644
26ba25
--- a/tests/qemu-iotests/219.out
26ba25
+++ b/tests/qemu-iotests/219.out
26ba25
@@ -3,7 +3,7 @@ Launching VM...
26ba25
 
26ba25
 Starting block job: drive-mirror (auto-finalize: True; auto-dismiss: True)
26ba25
 {u'return': {}}
26ba25
-{u'return': [{u'status': u'running', u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
26ba25
+{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'mirror'}]}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 
26ba25
@@ -93,7 +93,7 @@ Waiting for PENDING state...
26ba25
 
26ba25
 Starting block job: drive-backup (auto-finalize: True; auto-dismiss: True)
26ba25
 {u'return': {}}
26ba25
-{u'return': [{u'status': u'running', u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
26ba25
+{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 
26ba25
@@ -144,7 +144,7 @@ Waiting for PENDING state...
26ba25
 
26ba25
 Starting block job: drive-backup (auto-finalize: True; auto-dismiss: False)
26ba25
 {u'return': {}}
26ba25
-{u'return': [{u'status': u'running', u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
26ba25
+{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 
26ba25
@@ -203,7 +203,7 @@ Waiting for PENDING state...
26ba25
 
26ba25
 Starting block job: drive-backup (auto-finalize: False; auto-dismiss: True)
26ba25
 {u'return': {}}
26ba25
-{u'return': [{u'status': u'running', u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
26ba25
+{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 
26ba25
@@ -262,7 +262,7 @@ Waiting for PENDING state...
26ba25
 
26ba25
 Starting block job: drive-backup (auto-finalize: False; auto-dismiss: False)
26ba25
 {u'return': {}}
26ba25
-{u'return': [{u'status': u'running', u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
26ba25
+{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
26ba25
 
26ba25
-- 
26ba25
1.8.3.1
26ba25