diff options
-rwxr-xr-x | nova/compute/manager.py | 3 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 37 |
2 files changed, 39 insertions, 1 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 11ec70e44..15d1d7d28 100755 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2239,7 +2239,8 @@ class ComputeManager(manager.SchedulerDependentManager): instance = self._instance_update(context, instance['uuid'], vm_state=vm_state, task_state=None, - expected_task_state=None) + expected_task_state=[None, + task_states.DELETING]) self._notify_about_instance_usage( context, instance, "resize.confirm.end", diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index bf6508803..8c6fce3a5 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -6704,6 +6704,43 @@ class ComputeAPITestCase(BaseTestCase): self.compute.terminate_instance(self.context, instance=jsonutils.to_primitive(instance)) + def test_allow_confirm_resize_on_instance_in_deleting_task_state(self): + instance = self._create_fake_instance() + old_type = flavors.extract_flavor(instance) + new_type = flavors.get_flavor_by_flavor_id('4') + sys_meta = utils.metadata_to_dict(instance['system_metadata']) + sys_meta = flavors.save_flavor_info(sys_meta, + old_type, 'old_') + sys_meta = flavors.save_flavor_info(sys_meta, + new_type, 'new_') + sys_meta = flavors.save_flavor_info(sys_meta, + new_type) + + fake_rt = self.mox.CreateMockAnything() + + def fake_drop_resize_claim(*args, **kwargs): + pass + + def fake_get_resource_tracker(self): + return fake_rt + + self.stubs.Set(fake_rt, 'drop_resize_claim', fake_drop_resize_claim) + self.stubs.Set(self.compute, '_get_resource_tracker', + fake_get_resource_tracker) + + migration = db.migration_create(self.context.elevated(), + {'instance_uuid': instance['uuid'], + 'status': 'finished'}) + instance = db.instance_update(self.context, instance['uuid'], + {'task_state': task_states.DELETING, + 'vm_state': vm_states.RESIZED, + 'system_metadata': sys_meta}) + + self.compute.confirm_resize(self.context, instance, + migration=migration) + instance = db.instance_get_by_uuid(self.context, instance['uuid']) + self.assertEqual(vm_states.ACTIVE, instance['vm_state']) + def test_resize_revert_through_api(self): instance = jsonutils.to_primitive(self._create_fake_instance()) instance = db.instance_get_by_uuid(self.context, instance['uuid']) |