|
|
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 |
|