diff options
Diffstat (limited to 'resources/libraries/python/QemuUtils.py')
-rw-r--r-- | resources/libraries/python/QemuUtils.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index 1e3a8aa6b6..8ee972533a 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -142,8 +142,7 @@ class QemuUtils(object): raise ValueError('Host CPU count must match Qemu Thread count') for qemu_cpu, host_cpu in zip(qemu_cpus, host_cpus): - cmd = 'taskset -p {0} {1}'.format(hex(1 << int(host_cpu)), - qemu_cpu['thread_id']) + cmd = 'taskset -pc {0} {1}'.format(host_cpu, qemu_cpu['thread_id']) (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd) if int(ret_code) != 0: logger.debug('Set affinity failed {0}'.format(stderr)) @@ -280,21 +279,24 @@ class QemuUtils(object): return {} return json.loads(stdout.split('\n', 1)[0]) - def _wait_until_vm_boot(self, timeout=300): + def _wait_until_vm_boot(self, timeout=60): """Wait until QEMU VM is booted. Ping QEMU guest agent each 5s until VM booted or timeout. - :param timeout: Waiting timeout in seconds (optional, default 300s). + :param timeout: Waiting timeout in seconds (optional, default 60s). :type timeout: int """ start = time() - while 1: + while True: if time() - start > timeout: raise RuntimeError('timeout, VM {0} not booted on {1}'.format( self._qemu_opt['disk_image'], self._node['host'])) self._qemu_qga_flush() - out = self._qemu_qga_exec('guest-ping') + try: + out = self._qemu_qga_exec('guest-ping') + except ValueError: + logger.trace('QGA guest-ping unexpected output {}'.format(out)) # Empty output - VM not booted yet if not out: sleep(5) @@ -305,8 +307,10 @@ class QemuUtils(object): elif out.get('error') is not None: sleep(5) else: - raise RuntimeError('QGA guest-ping unexpected output {}'.format( - out)) + # If there is an unexpected output from QGA guest-info, try + # again until timeout. + logger.trace('QGA guest-ping unexpected output {}'.format(out)) + logger.trace('VM {0} booted on {1}'.format(self._qemu_opt['disk_image'], self._node['host'])) @@ -513,7 +517,12 @@ class QemuUtils(object): self._node['host'])) logger.trace('QEMU running') # Wait until VM boot - self._wait_until_vm_boot() + try: + self._wait_until_vm_boot() + except RuntimeError: + self.qemu_kill() + self.qemu_clear_socks() + raise # Update interface names in VM node dict self._update_vm_interfaces() # Return VM node dict |