902636
From d6df1426ae65b3a0d50bdbb1f8a7246386dd6ebf Mon Sep 17 00:00:00 2001
902636
From: Kevin Wolf <kwolf@redhat.com>
902636
Date: Fri, 7 Feb 2020 11:24:04 +0000
902636
Subject: [PATCH 07/18] iotests.py: Let wait_migration wait even more
902636
902636
RH-Author: Kevin Wolf <kwolf@redhat.com>
902636
Message-id: <20200207112404.25198-7-kwolf@redhat.com>
902636
Patchwork-id: 93751
902636
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 6/6] iotests.py: Let wait_migration wait even more
902636
Bugzilla: 1781637
902636
RH-Acked-by: Sergio Lopez Pascual <slp@redhat.com>
902636
RH-Acked-by: Max Reitz <mreitz@redhat.com>
902636
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
902636
902636
From: Max Reitz <mreitz@redhat.com>
902636
902636
The "migration completed" event may be sent (on the source, to be
902636
specific) before the migration is actually completed, so the VM runstate
902636
will still be "finish-migrate" instead of "postmigrate".  So ask the
902636
users of VM.wait_migration() to specify the final runstate they desire
902636
and then poll the VM until it has reached that state.  (This should be
902636
over very quickly, so busy polling is fine.)
902636
902636
Without this patch, I see intermittent failures in the new iotest 280
902636
under high system load.  I have not yet seen such failures with other
902636
iotests that use VM.wait_migration() and query-status afterwards, but
902636
maybe they just occur even more rarely, or it is because they also wait
902636
on the destination VM to be running.
902636
902636
Signed-off-by: Max Reitz <mreitz@redhat.com>
902636
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
902636
(cherry picked from commit 8da7969bd7014f6de037d8ae132b40721944b186)
902636
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
902636
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
902636
---
902636
 tests/qemu-iotests/234        | 8 ++++----
902636
 tests/qemu-iotests/262        | 4 ++--
902636
 tests/qemu-iotests/280        | 2 +-
902636
 tests/qemu-iotests/iotests.py | 6 +++++-
902636
 4 files changed, 12 insertions(+), 8 deletions(-)
902636
902636
diff --git a/tests/qemu-iotests/234 b/tests/qemu-iotests/234
902636
index 34c818c..59a7f94 100755
902636
--- a/tests/qemu-iotests/234
902636
+++ b/tests/qemu-iotests/234
902636
@@ -69,9 +69,9 @@ with iotests.FilePath('img') as img_path, \
902636
     iotests.log(vm_a.qmp('migrate', uri='exec:cat >%s' % (fifo_a)))
902636
     with iotests.Timeout(3, 'Migration does not complete'):
902636
         # Wait for the source first (which includes setup=setup)
902636
-        vm_a.wait_migration()
902636
+        vm_a.wait_migration('postmigrate')
902636
         # Wait for the destination second (which does not)
902636
-        vm_b.wait_migration()
902636
+        vm_b.wait_migration('running')
902636
 
902636
     iotests.log(vm_a.qmp('query-migrate')['return']['status'])
902636
     iotests.log(vm_b.qmp('query-migrate')['return']['status'])
902636
@@ -98,9 +98,9 @@ with iotests.FilePath('img') as img_path, \
902636
     iotests.log(vm_b.qmp('migrate', uri='exec:cat >%s' % (fifo_b)))
902636
     with iotests.Timeout(3, 'Migration does not complete'):
902636
         # Wait for the source first (which includes setup=setup)
902636
-        vm_b.wait_migration()
902636
+        vm_b.wait_migration('postmigrate')
902636
         # Wait for the destination second (which does not)
902636
-        vm_a.wait_migration()
902636
+        vm_a.wait_migration('running')
902636
 
902636
     iotests.log(vm_a.qmp('query-migrate')['return']['status'])
902636
     iotests.log(vm_b.qmp('query-migrate')['return']['status'])
902636
diff --git a/tests/qemu-iotests/262 b/tests/qemu-iotests/262
902636
index 0963daa..bbcb526 100755
902636
--- a/tests/qemu-iotests/262
902636
+++ b/tests/qemu-iotests/262
902636
@@ -71,9 +71,9 @@ with iotests.FilePath('img') as img_path, \
902636
     iotests.log(vm_a.qmp('migrate', uri='exec:cat >%s' % (fifo)))
902636
     with iotests.Timeout(3, 'Migration does not complete'):
902636
         # Wait for the source first (which includes setup=setup)
902636
-        vm_a.wait_migration()
902636
+        vm_a.wait_migration('postmigrate')
902636
         # Wait for the destination second (which does not)
902636
-        vm_b.wait_migration()
902636
+        vm_b.wait_migration('running')
902636
 
902636
     iotests.log(vm_a.qmp('query-migrate')['return']['status'])
902636
     iotests.log(vm_b.qmp('query-migrate')['return']['status'])
902636
diff --git a/tests/qemu-iotests/280 b/tests/qemu-iotests/280
902636
index 0b1fa8e..85e9114 100755
902636
--- a/tests/qemu-iotests/280
902636
+++ b/tests/qemu-iotests/280
902636
@@ -45,7 +45,7 @@ with iotests.FilePath('base') as base_path , \
902636
     vm.qmp_log('migrate', uri='exec:cat > /dev/null')
902636
 
902636
     with iotests.Timeout(3, 'Migration does not complete'):
902636
-        vm.wait_migration()
902636
+        vm.wait_migration('postmigrate')
902636
 
902636
     iotests.log('\nVM is now stopped:')
902636
     iotests.log(vm.qmp('query-migrate')['return']['status'])
902636
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
902636
index 5741efb..0c55f7b 100644
902636
--- a/tests/qemu-iotests/iotests.py
902636
+++ b/tests/qemu-iotests/iotests.py
902636
@@ -663,12 +663,16 @@ class VM(qtest.QEMUQtestMachine):
902636
             }
902636
         ]))
902636
 
902636
-    def wait_migration(self):
902636
+    def wait_migration(self, expect_runstate):
902636
         while True:
902636
             event = self.event_wait('MIGRATION')
902636
             log(event, filters=[filter_qmp_event])
902636
             if event['data']['status'] == 'completed':
902636
                 break
902636
+        # The event may occur in finish-migrate, so wait for the expected
902636
+        # post-migration runstate
902636
+        while self.qmp('query-status')['return']['status'] != expect_runstate:
902636
+            pass
902636
 
902636
     def node_info(self, node_name):
902636
         nodes = self.qmp('query-named-block-nodes')
902636
-- 
902636
1.8.3.1
902636