diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-03-19 15:05:23 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-03-19 15:05:23 +0000 |
commit | efd628c9d604759adc11564bbea0e1ea082876ce (patch) | |
tree | 80aac780d8106f746e177ac43eb9f715c16cf3e8 | |
parent | 2ce626fb53e5cbbd736fe7c37edfc338bdfd331c (diff) | |
parent | 88da0984c81fa98ff1d32915a4152773d7caa257 (diff) | |
download | nova-efd628c9d604759adc11564bbea0e1ea082876ce.tar.gz |
Merge "Take a vm out of SNAPSHOTTING after Glance error" into stable/havana
-rw-r--r-- | nova/compute/manager.py | 6 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 8e56d150cf..4e70c94405 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2351,8 +2351,10 @@ class ComputeManager(manager.SchedulerDependentManager): msg = _("Instance disappeared during snapshot") LOG.debug(msg, instance=instance) except exception.ImageNotFound: - msg = _("Image not found") - LOG.debug(msg, instance=instance) + instance.task_state = None + instance.save() + msg = _("Image not found during snapshot") + LOG.warn(msg, instance=instance) except exception.UnexpectedTaskStateError as e: actual_task_state = e.kwargs.get('actual', None) if actual_task_state == 'deleting': diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 069b26ddc0..d6b4e37c0c 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -2480,6 +2480,20 @@ class ComputeTestCase(BaseTestCase): def test_snapshot_fails_cleanup_ignores_exception(self): self._test_snapshot_fails(True) + def test_snapshot_fails_with_glance_error(self): + def fake_snapshot(*args, **kwargs): + raise exception.ImageNotFound(image_id='xxx') + + self.stubs.Set(self.compute.driver, 'snapshot', fake_snapshot) + fake_image.stub_out_image_service(self.stubs) + + inst_obj = self._get_snapshotting_instance() + + self.compute.snapshot_instance( + self.context, image_id='fakesnap', + instance=inst_obj) + self._assert_state({'task_state': None}) + def test_snapshot_handles_cases_when_instance_is_deleted(self): inst_obj = self._get_snapshotting_instance() inst_obj.task_state = task_states.DELETING |