summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xnova/compute/manager.py3
-rw-r--r--nova/tests/compute/test_compute.py37
2 files changed, 39 insertions, 1 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 2ae435f9a..84d333970 100755
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -2221,7 +2221,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 bcf48ebb6..23e9a9a7d 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -6593,6 +6593,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'])