def run(test, params, env): """ Test migration under stress. """ vm_names = params.get("vms").split() if len(vm_names) < 2: test.cancel("Provide enough vms for migration") src_uri = "qemu:///system" dest_uri = libvirt_vm.complete_uri(params.get("migrate_dest_host", "EXAMPLE")) if dest_uri.count('///') or dest_uri.count('EXAMPLE'): test.cancel("The dest_uri '%s' is invalid" % dest_uri) # Migrated vms' instance vms = env.get_all_vms() params["load_vms"] = list(vms) cpu = int(params.get("smp", 1)) memory = int(params.get("mem")) * 1024 stress_tool = params.get("stress_tool", "") remote_stress = params.get("migration_stress_remote", "no") == "yes" host_stress = params.get("migration_stress_host", "no") == "yes" vms_stress = params.get("migration_stress_vms", "no") == "yes" vm_bytes = params.get("stress_vm_bytes", "128M") stress_args = params.get("%s_args" % stress_tool) migration_type = params.get("migration_type") start_migration_vms = params.get("start_migration_vms", "yes") == "yes" thread_timeout = int(params.get("thread_timeout", 120)) ubuntu_dep = ['build-essential', 'git'] hstress = rstress = None vstress = {} # Set vm_bytes for start_cmd mem_total = utils_memory.memtotal() vm_reserved = len(vms) * memory if vm_bytes == "half": vm_bytes = (mem_total - vm_reserved) / 2 elif vm_bytes == "shortage": vm_bytes = mem_total - vm_reserved + 524288 if "vm-bytes" in stress_args: params["%s_args" % stress_tool] = stress_args % vm_bytes # Ensure stress tool is available in host if host_stress: # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool): logging.error("Existing %s is not removed") if "stress-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(): params['stress-ng_dependency_packages_list'] = ubuntu_dep try: hstress = utils_test.HostStress(stress_tool, params) hstress.load_stress_tool() except utils_test.StressError, info: test.error(info)
def __init__(self, params): self.mount_dir = params.get("nfs_mount_dir") self.mount_options = params.get("nfs_mount_options") self.mount_src = params.get("nfs_mount_src") self.nfs_setup = False path.find_command("mount") self.rm_mount_dir = False self.rm_export_dir = False self.unexportfs_in_clean = False distro_details = distro.detect().name self.session = None self.setup_nfs_ip = params.get("nfs_server_ip", "127.0.0.1") self.export_dir = (params.get("export_dir") or self.mount_src.split(":")[-1]) self.export_ip = params.get("export_ip", "*") self.export_options = params.get("export_options", "").strip() if params.get("setup_remote_nfs") == "yes": self.nfs_setup = True self.setup_nfs_ip = params["nfs_server_ip"] nfs_server_params = { 'server_ip': self.setup_nfs_ip, 'server_pwd': params["nfs_server_pwd"], 'server_user': params.get("nfs_server_user", "root") } self.session = test_setup.remote_session(nfs_server_params) distro_details = utils_misc.get_distro(self.session) if self.session.cmd_status("exportfs -h") != 0: logging.error("exportfs cmd not available in remote host") elif params.get("setup_local_nfs") == "yes": self.nfs_setup = True self.setup_nfs_ip = "127.0.0.1" path.find_command("service") path.find_command("exportfs") if (params.get("setup_remote_nfs") == "yes" or params.get("setup_local_nfs") == "yes"): if 'Ubuntu' in distro_details or 'rhel' in distro_details: self.nfs_service = service.Service("nfs-server", session=self.session) else: self.nfs_service = service.Service("nfs", session=self.session) self.rpcbind_service = service.Service("rpcbind", session=self.session) self.exportfs = Exportfs(self.export_dir, self.export_ip, self.export_options, session=self.session) self.mount_src = "%s:%s" % (self.setup_nfs_ip, self.export_dir)
def run(test, params, env): """ Test migration under stress. """ vm_names = params.get("vms").split() if len(vm_names) < 2: test.cancel("Provide enough vms for migration") src_uri = "qemu:///system" dest_uri = libvirt_vm.complete_uri( params.get("migrate_dest_host", "EXAMPLE")) if dest_uri.count('///') or dest_uri.count('EXAMPLE'): test.cancel("The dest_uri '%s' is invalid" % dest_uri) # Migrated vms' instance vms = env.get_all_vms() params["load_vms"] = list(vms) cpu = int(params.get("smp", 1)) memory = int(params.get("mem")) * 1024 stress_tool = params.get("stress_tool", "") remote_stress = params.get("migration_stress_remote", "no") == "yes" host_stress = params.get("migration_stress_host", "no") == "yes" vms_stress = params.get("migration_stress_vms", "no") == "yes" vm_bytes = params.get("stress_vm_bytes", "128M") stress_args = params.get("%s_args" % stress_tool) migration_type = params.get("migration_type") start_migration_vms = params.get("start_migration_vms", "yes") == "yes" thread_timeout = int(params.get("thread_timeout", 120)) ubuntu_dep = ['build-essential', 'git'] hstress = rstress = None vstress = {} # Set vm_bytes for start_cmd mem_total = utils_memory.memtotal() vm_reserved = len(vms) * memory if vm_bytes == "half": vm_bytes = (mem_total - vm_reserved) / 2 elif vm_bytes == "shortage": vm_bytes = mem_total - vm_reserved + 524288 if "vm-bytes" in stress_args: params["%s_args" % stress_tool] = stress_args % vm_bytes # Ensure stress tool is available in host if host_stress: # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool): logging.error("Existing %s is not removed") if "stress-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(): params['stress-ng_dependency_packages_list'] = ubuntu_dep try: hstress = utils_test.HostStress(stress_tool, params) hstress.load_stress_tool() except utils_test.StressError as info: test.error(info) if remote_stress: try: server_ip = params['remote_ip'] server_pwd = params['remote_pwd'] server_user = params.get('remote_user', 'root') remote_session = remote.wait_for_login('ssh', server_ip, '22', server_user, server_pwd, r"[\#\$]\s*$") # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool, session=remote_session): logging.error("Existing %s is not removed") if ("stess-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(session=remote_session)): params['stress-ng_dependency_packages_list'] = ubuntu_dep rstress = utils_test.HostStress(stress_tool, params, remote_server=True) rstress.load_stress_tool() remote_session.close() except utils_test.StressError as info: remote_session.close() test.error(info) for vm in vms: # Keep vm dead for edit if vm.is_alive(): vm.destroy() set_cpu_memory(vm.name, cpu, memory) try: if start_migration_vms: for vm in vms: vm.start() session = vm.wait_for_login() # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool, session=session): logging.error("Existing %s is not removed") # configure stress in VM if vms_stress: if ("stress-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(session=session)): params[ 'stress-ng_dependency_packages_list'] = ubuntu_dep try: vstress[vm.name] = utils_test.VMStress( vm, stress_tool, params) vstress[vm.name].load_stress_tool() except utils_test.StressError as info: session.close() test.error(info) session.close() do_stress_migration(vms, src_uri, dest_uri, migration_type, test, params, thread_timeout) finally: logging.debug("Cleanup vms...") for vm in vms: utils_test.libvirt.MigrationTest().cleanup_dest_vm( vm, None, dest_uri) # Try to start vms in source once vms in destination are # cleaned up if not vm.is_alive(): vm.start() vm.wait_for_login() try: if vstress[vm.name]: vstress[vm.name].unload_stress() except KeyError: continue if rstress: rstress.unload_stress() if hstress: hstress.unload_stress()
hstress.load_stress_tool() except utils_test.StressError, info: test.error(info) if remote_stress: try: server_ip = params['remote_ip'] server_pwd = params['remote_pwd'] server_user = params.get('remote_user', 'root') remote_session = remote.wait_for_login('ssh', server_ip, '22', server_user, server_pwd, r"[\#\$]\s*$") # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool, session=remote_session): logging.error("Existing %s is not removed") if("stess-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(session=remote_session)): params['stress-ng_dependency_packages_list'] = ubuntu_dep rstress = utils_test.HostStress(stress_tool, params, remote_server=True) rstress.load_stress_tool() remote_session.close() except utils_test.StressError, info: remote_session.close() test.error(info) for vm in vms: # Keep vm dead for edit if vm.is_alive(): vm.destroy() set_cpu_memory(vm.name, cpu, memory)
test.error(info) if remote_stress: try: server_ip = params['remote_ip'] server_pwd = params['remote_pwd'] server_user = params.get('remote_user', 'root') remote_session = remote.wait_for_login('ssh', server_ip, '22', server_user, server_pwd, r"[\#\$]\s*$") # remove package manager installed tool to avoid conflict if not utils_package.package_remove(stress_tool, session=remote_session): logging.error("Existing %s is not removed") if ("stess-ng" in stress_tool and 'Ubuntu' in utils_misc.get_distro(session=remote_session)): params['stress-ng_dependency_packages_list'] = ubuntu_dep rstress = utils_test.HostStress(stress_tool, params, remote_server=True) rstress.load_stress_tool() remote_session.close() except utils_test.StressError, info: remote_session.close() test.error(info) for vm in vms: # Keep vm dead for edit if vm.is_alive(): vm.destroy()