Skip to content

Commit 9a13fdc

Browse files
committed
migration: Support the migration for multi-host
Signed-off-by: Yongxue Hong <[email protected]>
1 parent 3ba9912 commit 9a13fdc

6 files changed

+53
-13
lines changed

qemu/tests/cfg/migrate.cfg

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
# you can uncomment the following line to enable the state
1515
# check
1616
# vmstate_check = yes
17+
take_regular_screendumps = no # FIXME:
18+
store_vm_info = no # FIXME:
19+
nodes = node1 node2
20+
node_selectors_node1 = [{"key": "cpu_vendor_id", "operator": "eq", "values": "AuthenticAMD"}, {"key": "hostname", "operator": "contains", "values": "redhat.com"}]
21+
node_selectors_node2 = [{"key": "cpu_vendor_id", "operator": "==", "values": "AuthenticAMD"}, {"key": "hostname", "operator": "contains", "values": "redhat.com"}]
22+
pools = p1
23+
vm_node = node1
24+
mig_dest_node = node2
25+
pool_selectors_p1 = [{"key": "type", "operator": "==", "values": "nfs"}, {"key": "access.nodes", "operator": "contains", "values": ["node1", "node2"]}]
26+
image_pool_name_image1 = p1
1727
variants:
1828
- @default:
1929
- with_filter_off:

qemu/tests/migration.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import types
55

66
import aexpect
7+
from virttest import qemu_monitor # For MonitorNotSupportedMigCapError
78
from virttest import (
89
error_context,
910
qemu_migration,
10-
qemu_monitor, # For MonitorNotSupportedMigCapError
1111
utils_misc,
1212
utils_package,
1313
utils_test,
@@ -229,8 +229,10 @@ def guest_stress_deamon():
229229
for func in pre_migrate:
230230
func(vm, params, test)
231231
if i % 2 == 0:
232+
dst_node = params.get("mig_dest_node")
232233
test.log.info("Round %s ping...", str(i / 2))
233234
else:
235+
dst_node = params.get("vm_node")
234236
test.log.info("Round %s pong...", str(i / 2))
235237
try:
236238
vm.migrate(
@@ -239,6 +241,7 @@ def guest_stress_deamon():
239241
mig_cancel_delay,
240242
offline,
241243
check,
244+
dest_host=dst_node,
242245
migration_exec_cmd_src=mig_exec_cmd_src,
243246
migration_exec_cmd_dst=mig_exec_cmd_dst,
244247
migrate_capabilities=capabilities,

qemu/tests/migration_with_file_transfer.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@ def run(test, params, env):
3232
host_path = "/tmp/file-%s" % utils_misc.generate_random_string(6)
3333
host_path_returned = "%s-returned" % host_path
3434
guest_path = params.get("guest_path", "/tmp/file")
35-
file_size = params.get("file_size", "500")
35+
file_size = params.get("file_size", "1000")
3636
transfer_timeout = int(params.get("transfer_timeout", "240"))
3737
if mig_protocol == "exec":
3838
mig_file = os.path.join(
3939
test.tmpdir, "tmp-%s" % utils_misc.generate_random_string(8)
4040
)
41-
41+
cnt = 0
4242
try:
43-
process.run("dd if=/dev/urandom of=%s bs=1M count=%s" % (host_path, file_size))
43+
process.run("dd if=/dev/zero of=%s bs=1M count=%s" % (host_path, file_size))
4444

45-
def run_and_migrate(bg):
45+
def run_and_migrate(bg, cnt):
4646
bg.start()
4747
try:
4848
while bg.is_alive():
@@ -54,21 +54,28 @@ def run_and_migrate(bg):
5454
if mig_protocol == "exec" and migration_exec_cmd_src:
5555
migration_exec_cmd_src %= mig_file # pylint: disable=E0606
5656
migration_exec_cmd_dst %= mig_file
57+
if cnt % 2 == 0:
58+
dest_host = params.get("mig_dest_node")
59+
else:
60+
dest_host = params.get("vm_node")
5761
vm.migrate(
5862
mig_timeout,
5963
mig_protocol,
6064
mig_cancel_delay,
65+
dest_host=dest_host,
6166
env=env,
6267
migration_exec_cmd_src=migration_exec_cmd_src,
6368
migration_exec_cmd_dst=migration_exec_cmd_dst,
6469
)
70+
cnt += 1
6571
except Exception:
6672
# If something bad happened in the main thread, ignore
6773
# exceptions raised in the background thread
6874
bg.join(suppress_exception=True)
6975
raise
7076
else:
7177
bg.join()
78+
return cnt
7279

7380
error_context.context(
7481
"transferring file to guest while migrating", test.log.info
@@ -78,7 +85,7 @@ def run_and_migrate(bg):
7885
(host_path, guest_path),
7986
dict(verbose=True, timeout=transfer_timeout),
8087
)
81-
run_and_migrate(bg)
88+
cnt = run_and_migrate(bg, cnt)
8289

8390
error_context.context(
8491
"transferring file back to host while migrating", test.log.info
@@ -88,7 +95,7 @@ def run_and_migrate(bg):
8895
(guest_path, host_path_returned),
8996
dict(verbose=True, timeout=transfer_timeout),
9097
)
91-
run_and_migrate(bg)
98+
run_and_migrate(bg, cnt)
9299

93100
# Make sure the returned file is identical to the original one
94101
error_context.context("comparing hashes", test.log.info)

qemu/tests/migration_with_netperf.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,20 @@ def run(test, params, env):
124124
m_count = 0
125125
while netperf_client_h.is_netperf_running():
126126
m_count += 1
127+
if m_count % 2 == 0:
128+
dest_host = params.get("vm_node")
129+
else:
130+
dest_host = params.get("mig_dest_node")
127131
error_context.context(
128132
"Start migration iterations: %s " % m_count, test.log.info
129133
)
130-
vm.migrate(mig_timeout, mig_protocol, mig_cancel_delay, env=env)
134+
vm.migrate(
135+
mig_timeout,
136+
mig_protocol,
137+
mig_cancel_delay,
138+
dest_host=dest_host,
139+
env=env,
140+
)
131141
finally:
132142
if netperf_server_g:
133143
if netperf_server_g.is_server_running():

qemu/tests/migration_with_reboot.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import os
22
import tempfile
33

4-
from virttest import utils_misc
5-
64
# Import helper methods from test "migration"
75
from qemu.tests import migration
6+
from virttest import utils_misc
87

98

109
def run(test, params, env):
@@ -48,22 +47,30 @@ def run(test, params, env):
4847
bg = utils_misc.InterruptedThread(
4948
vm.reboot, kwargs={"session": session, "timeout": login_timeout}
5049
)
50+
bg.daemon = True
5151
bg.start()
5252
try:
53+
cnt = 0
5354
while bg.is_alive():
5455
for func in pre_migrate:
5556
func(vm, params, test)
57+
if cnt % 2 == 0:
58+
dest_host = params.get("mig_dest_node")
59+
else:
60+
dest_host = params.get("vm_node")
5661
vm.migrate(
5762
mig_timeout,
5863
mig_protocol,
5964
mig_cancel_delay,
65+
dest_host=dest_host,
6066
env=env,
6167
migration_exec_cmd_src=migration_exec_cmd_src,
6268
migration_exec_cmd_dst=migration_exec_cmd_dst,
6369
)
6470
# run some functions after migrate finish.
6571
for func in post_migrate:
6672
func(vm, params, test)
73+
cnt += 1
6774
except Exception:
6875
# If something bad happened in the main thread, ignore exceptions
6976
# raised in the background thread

qemu/tests/migration_with_speed_measurement.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import time
44

55
import six
6-
from virttest import qemu_migration, utils_misc
7-
86
from provider import cpuflags
7+
from virttest import qemu_migration, utils_misc
98

109

1110
class Statistic(object):
@@ -141,7 +140,11 @@ def get_migration_statistic(vm):
141140
time.sleep(2)
142141

143142
clonevm = vm.migrate(
144-
mig_timeout, mig_protocol, not_wait_for_migration=True, env=env
143+
mig_timeout,
144+
mig_protocol,
145+
not_wait_for_migration=True,
146+
dest_host=params.get("mig_dest_node"),
147+
env=env,
145148
)
146149

147150
mig_speed = int(float(utils_misc.normalize_data_size(mig_speed, "M")))

0 commit comments

Comments
 (0)