diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-01-18 18:11:49 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-01-18 18:11:49 +0000 |
| commit | 86fd2c7a5c77ea8933624d300f62e2149359d289 (patch) | |
| tree | 2c84603425f7c0ee450e1acecf485194bd29f22f | |
| parent | e03374725f5e8cc14a453a9c0311f563af776a76 (diff) | |
| parent | 3b4016184f83c71158d41db9a26e6043d9ae1506 (diff) | |
| download | nova-86fd2c7a5c77ea8933624d300f62e2149359d289.tar.gz nova-86fd2c7a5c77ea8933624d300f62e2149359d289.tar.xz nova-86fd2c7a5c77ea8933624d300f62e2149359d289.zip | |
Merge "Makes sure compute doesn't crash on failed resume."
| -rw-r--r-- | nova/compute/manager.py | 5 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 29 |
2 files changed, 34 insertions, 0 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 384866cbe..86f41cd3c 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -463,6 +463,11 @@ class ComputeManager(manager.SchedulerDependentManager): except NotImplementedError: LOG.warning(_('Hypervisor driver does not support ' 'resume guests'), instance=instance) + except Exception: + # NOTE(vish): The instance failed to resume, so we set the + # instance to error and attempt to continue. + LOG.warning(_('Failed to resume instance'), instance=instance) + self._set_instance_error_state(context, instance['uuid']) elif drv_state == power_state.RUNNING: # VMwareAPI drivers will raise an exception diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 691991f60..596668048 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3306,6 +3306,35 @@ class ComputeTestCase(BaseTestCase): self.mox.VerifyAll() self.mox.UnsetStubs() + def test_init_instance_failed_resume_sets_error(self): + instance = { + 'uuid': 'fake-uuid', + 'info_cache': None, + 'power_state': power_state.RUNNING, + 'vm_state': vm_states.ACTIVE, + } + self.flags(resume_guests_state_on_host_boot=True) + self.mox.StubOutWithMock(self.compute, '_get_power_state') + self.mox.StubOutWithMock(self.compute.driver, 'plug_vifs') + self.mox.StubOutWithMock(self.compute.driver, + 'resume_state_on_host_boot') + self.mox.StubOutWithMock(self.compute, + '_get_instance_volume_block_device_info') + self.mox.StubOutWithMock(self.compute, + '_set_instance_error_state') + self.compute._get_power_state(mox.IgnoreArg(), + instance).AndReturn(power_state.SHUTDOWN) + self.compute.driver.plug_vifs(instance, mox.IgnoreArg()) + self.compute._get_instance_volume_block_device_info(mox.IgnoreArg(), + instance['uuid']).AndReturn('fake-bdm') + self.compute.driver.resume_state_on_host_boot(mox.IgnoreArg(), + instance, mox.IgnoreArg(), + 'fake-bdm').AndRaise(test.TestingException) + self.compute._set_instance_error_state(mox.IgnoreArg(), + instance['uuid']) + self.mox.ReplayAll() + self.compute._init_instance('fake-context', instance) + def test_get_instances_on_driver(self): fake_context = context.get_admin_context() |
