From dc68e51c51b9d423601f6c1bfd627716df1e66bd Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 9 Mar 2012 15:45:49 -0800 Subject: Allow soft_reboot to work from more states: * update sync_power_states to update other states * only attempt to shutdown the domain if it is running * attempt to start the domain from shutoff and crashed * fixes bug 951235 Change-Id: Icaa071ac59700385d9985315b99c0468415e444a --- nova/compute/manager.py | 5 ++++- nova/virt/libvirt/connection.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'nova') diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 1c6de672f..6572c5a3a 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2343,7 +2343,10 @@ class ComputeManager(manager.SchedulerDependentManager): if vm_power_state == db_power_state: continue - if (vm_power_state in (power_state.NOSTATE, power_state.SHUTOFF) + if (vm_power_state in (power_state.NOSTATE, + power_state.SHUTOFF, + power_state.SHUTDOWN, + power_state.CRASHED) and db_instance['vm_state'] == vm_states.ACTIVE): self._instance_update(context, db_instance["id"], diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index ae2a2b665..207461e44 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -674,13 +674,19 @@ class LibvirtConnection(driver.ComputeDriver): :returns: True if the reboot succeeded """ dom = self._lookup_by_name(instance.name) - dom.shutdown() + (state, _max_mem, _mem, _cpus, _t) = dom.info() + # NOTE(vish): This check allows us to reboot an instance that + # is already shutdown. + if state == power_state.RUNNING: + dom.shutdown() # NOTE(vish): This actually could take slighty longer than the # FLAG defines depending on how long the get_info # call takes to return. for x in xrange(FLAGS.libvirt_wait_soft_reboot_seconds): - state = self.get_info(instance)['state'] - if state == power_state.SHUTDOWN: + (state, _max_mem, _mem, _cpus, _t) = dom.info() + if state in [power_state.SHUTDOWN, + power_state.SHUTOFF, + power_state.CRASHED]: LOG.info(_("Instance shutdown successfully."), instance=instance) dom.create() -- cgit