Skip to content

Commit 825c004

Browse files
authored
Merge pull request #6755 from meinaLi/blk_nbd_disk_migration
Virtual disk: add different migration test cases
2 parents 606d2ff + d5cdc6a commit 825c004

3 files changed

Lines changed: 159 additions & 1 deletion

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
- migration.migration_with_disk.migration_with_different_disks:
2+
type = migration_with_different_disks
3+
start_vm = "no"
4+
migration_setup = "yes"
5+
storage_type = "nfs"
6+
setup_local_nfs = "yes"
7+
disk_type = "file"
8+
disk_source_protocol = "netfs"
9+
mnt_path_name = ${nfs_mount_dir}
10+
# Console output can only be monitored via virsh console output
11+
only_pty = True
12+
take_regular_screendumps = no
13+
# Extra options to pass after <domain> <desturi>
14+
virsh_migrate_extra = ""
15+
ssh_timeout = 60
16+
virsh_migrate_connect_uri = "qemu:///system"
17+
virsh_migrate_dest_state = "running"
18+
virsh_migrate_src_state = "shut off"
19+
server_ip = "${migrate_dest_host}"
20+
server_user = "root"
21+
server_pwd = "${migrate_dest_pwd}"
22+
client_ip = "${migrate_source_host}"
23+
client_pwd = "${migrate_source_pwd}"
24+
migrate_desturi_port = "22"
25+
migrate_desturi_type = "ssh"
26+
virsh_migrate_desturi = "qemu+ssh://${migrate_dest_host}/system"
27+
check_disk_after_mig = "yes"
28+
simple_disk_check_after_mig = "yes"
29+
no ppc64le
30+
variants test_scenario:
31+
- block_disk:
32+
disk_type = "block"
33+
check_disk_kname_after_mig = "sda"
34+
vg_name = "vg0"
35+
lv_name = "lv0"
36+
lv_size = "200M"
37+
target_emulate_image = "emulated-iscsi2"
38+
disk_dict = {"type_name": "block", "device": "disk", "driver": {"name": "qemu", "type": "raw"}, "target": {"dev": "${check_disk_kname_after_mig}", "bus": "scsi"}}
39+
- nbd_disk:
40+
disk_type = "nbd"
41+
enable_tls = "no"
42+
check_disk_kname_after_mig = "vdb"
43+
nbd_server_port = "10809"
44+
shared_num = "2"
45+
disk_dict = {"type_name": "network", "device": "disk", "driver": {"name": "qemu", "type": "raw"}, "target": {"dev": "${check_disk_kname_after_mig}", "bus": "virtio"}}
46+
variants:
47+
- with_precopy:
48+
virsh_migrate_options = "--live --p2p --persistent --verbose"
49+
- with_postcopy:
50+
virsh_migrate_options = "--live --p2p --persistent --verbose --postcopy --timeout 10 --timeout-postcopy"
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import ast
2+
3+
from virttest import remote
4+
from virttest import utils_disk
5+
from virttest import utils_test
6+
from virttest import utils_iptables
7+
8+
from virttest.utils_libvirt import libvirt_disk
9+
from virttest.utils_test import libvirt
10+
11+
from provider.migration import base_steps
12+
from provider.virtual_disk import disk_base
13+
14+
15+
def setup_block_remote(params, test):
16+
"""
17+
Setup iSCSI target on remote host.
18+
19+
:param params: test parameters
20+
:param test: test object
21+
"""
22+
test.log.info("Setting up iSCSI target on remote host.")
23+
client_ip = params.get("client_ip")
24+
vg_name = params.get("vg_name", "vg0")
25+
lv_name = params.get("lv_name", "lv0")
26+
lv_size = params.get("lv_size", "200M")
27+
target_emulate_image = params.get("target_emulate_image", "emulated-iscsi2")
28+
block_dev = utils_test.RemoteDiskManager(params)
29+
iscsi_target, _ = libvirt.setup_or_cleanup_iscsi(is_setup=True,
30+
is_login=False,
31+
emulated_image=target_emulate_image,
32+
portal_ip=client_ip)
33+
34+
remote_device = block_dev.iscsi_login_setup(client_ip, iscsi_target)
35+
clear_dm_dev = (
36+
f"dmsetup ls --noheadings | awk '/^{vg_name}-/ {{print $1}}' "
37+
f"| xargs -r dmsetup remove --force; rm -rf /dev/{vg_name}"
38+
)
39+
remote.run_remote_cmd(clear_dm_dev, params, ignore_status=True)
40+
block_dev.create_vg(vg_name, remote_device)
41+
block_dev.create_image("lvm",
42+
size=lv_size,
43+
vgname=vg_name,
44+
lvname=lv_name,
45+
sparse=False,
46+
timeout=60)
47+
48+
49+
def run(test, params, env):
50+
"""
51+
Test migration with different disk types (iSCSI LV and NBD).
52+
"""
53+
def setup_test():
54+
"""
55+
Setup steps for migration with different disk types.
56+
"""
57+
test.log.info("Setting up %s disk test environment for guest.", disk_type)
58+
migration_obj.setup_connection()
59+
disk_obj.new_image_path = disk_obj.add_vm_disk(disk_type, disk_dict)
60+
if not vm.is_alive():
61+
vm.start()
62+
63+
vm_session = vm.wait_for_login()
64+
source_disk_name, _ = libvirt_disk.get_non_root_disk_name(vm_session)
65+
utils_disk.dd_data_to_vm_disk(vm_session, source_disk_name)
66+
vm_session.close()
67+
68+
if disk_type == "block":
69+
setup_block_remote(params, test)
70+
71+
if disk_type == "nbd":
72+
firewall_cmd.add_port(nbd_server_port, "tcp", permanent=True)
73+
74+
def cleanup_test():
75+
"""
76+
Cleanup steps for migration with different disk types.
77+
"""
78+
test.log.info("Cleanup steps for migration with different disk types.")
79+
migration_obj.cleanup_connection()
80+
disk_obj.cleanup_disk_preparation(disk_type)
81+
if disk_type == "block":
82+
remote.run_remote_cmd("iscsiadm -m session -u", params, ignore_status=True)
83+
libvirt.setup_or_cleanup_iscsi(is_setup=False,
84+
emulated_image=target_emulate_image,
85+
portal_ip=client_ip)
86+
if disk_type == "nbd":
87+
firewall_cmd.remove_port(nbd_server_port, "tcp", permanent=True)
88+
89+
vm_name = params.get("migrate_main_vm")
90+
vm = env.get_vm(vm_name)
91+
disk_type = params.get("disk_type")
92+
client_ip = params.get("client_ip")
93+
target_emulate_image = params.get("target_emulate_image", "emulated-iscsi2")
94+
disk_dict = ast.literal_eval(params.get("disk_dict", "{}"))
95+
nbd_server_port = params.get("nbd_server_port", "10809")
96+
97+
base_steps.sync_cpu_for_mig(params)
98+
migration_obj = base_steps.MigrationBase(test, vm, params)
99+
disk_obj = disk_base.DiskBase(test, vm, params)
100+
firewall_cmd = utils_iptables.Firewall_cmd()
101+
102+
try:
103+
setup_test()
104+
migration_obj.run_migration()
105+
migration_obj.verify_default()
106+
finally:
107+
cleanup_test()

provider/virtual_disk/disk_base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,13 @@ def prepare_disk_obj(self, disk_type, disk_dict, new_image_path='', **kwargs):
200200
device_format = self.params.get("device_format", "qcow2")
201201
export_name = self.params.get("export_name", "new")
202202
tls_enabled = "yes" == self.params.get("enable_tls", "yes")
203+
shared_num = self.params.get("shared_num")
203204
image_size = kwargs.get("size",
204205
self.params.get("image_size", "500M"))
205206

206207
self.disk_backend = NbdExport(
207208
image_path, image_format=device_format, port=nbd_server_port,
208-
image_size=image_size, export_name=export_name, tls=tls_enabled)
209+
image_size=image_size, export_name=export_name, tls=tls_enabled, shared_num=shared_num)
209210
self.disk_backend.start_nbd_server()
210211
utils_misc.wait_for(
211212
lambda: process.system('netstat -nlp | grep %s ' % nbd_server_port, ignore_status=True, shell=True) == 0, 10)

0 commit comments

Comments
 (0)