From f7deddb89ce63c2ccc7a207461188aeb7a41af32 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Thu, 2 Feb 2012 16:28:55 -0800 Subject: [PATCH] Fix status transition when reverting resize Present the instance being reverted with a 'REVERT_RESIZE' status instead of 'ACTIVE' after a revertResize action is triggered. Fixes bug 924371 Change-Id: I12e98733fd00c0794fb9a4acb0cc6752ca02e855 --- nova/api/openstack/common.py | 1 + nova/compute/api.py | 4 ++-- nova/compute/manager.py | 4 +++- nova/tests/api/openstack/compute/test_servers.py | 5 +++++ nova/tests/test_compute.py | 9 +++++++++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py index b46a6c1ebfd..9d3d3079f0a 100644 --- a/nova/api/openstack/common.py +++ b/nova/api/openstack/common.py @@ -66,6 +66,7 @@ }, vm_states.RESIZING: { 'default': 'RESIZE', + task_states.RESIZE_REVERTING: 'REVERT_RESIZE', }, vm_states.PAUSED: { 'default': 'PAUSED', diff --git a/nova/compute/api.py b/nova/compute/api.py index f54d184ddcf..aa38f4e7a94 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -1327,8 +1327,8 @@ def revert_resize(self, context, instance): self.update(context, instance, - vm_state=vm_states.ACTIVE, - task_state=None) + vm_state=vm_states.RESIZING, + task_state=task_states.RESIZE_REVERTING) params = {'migration_id': migration_ref['id']} self._cast_compute_message('revert_resize', context, diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 64401eeca6c..22c47df2ca2 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -1168,7 +1168,9 @@ def finish_revert_resize(self, context, instance_uuid, migration_id): vcpus=instance_type['vcpus'], root_gb=instance_type['root_gb'], ephemeral_gb=instance_type['ephemeral_gb'], - instance_type_id=instance_type['id']) + instance_type_id=instance_type['id'], + vm_state=vm_states.ACTIVE, + task_state=None) self.driver.finish_revert_migration(instance_ref) self.db.migration_update(context, migration_id, diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py index c6438380eae..07c15561dfe 100644 --- a/nova/tests/api/openstack/compute/test_servers.py +++ b/nova/tests/api/openstack/compute/test_servers.py @@ -1376,6 +1376,11 @@ def test_verify_resize(self): task_states.RESIZE_VERIFY) self.assertEqual(response['server']['status'], 'VERIFY_RESIZE') + def test_revert_resize(self): + response = self._get_with_state(vm_states.RESIZING, + task_states.RESIZE_REVERTING) + self.assertEqual(response['server']['status'], 'REVERT_RESIZE') + def test_password_update(self): response = self._get_with_state(vm_states.ACTIVE, task_states.UPDATING_PASSWORD) diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index 400e6949f21..bc52bb1b54a 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -1169,6 +1169,10 @@ def fake(*args, **kwargs): self.compute.finish_revert_resize(context, inst_ref['uuid'], migration_ref['id']) + instance = db.instance_get_by_uuid(context, instance['uuid']) + self.assertEqual(instance['vm_state'], vm_states.ACTIVE) + self.assertEqual(instance['task_state'], None) + inst_ref = db.instance_get_by_uuid(context, instance_uuid) instance_type_ref = db.instance_type_get(context, inst_ref['instance_type_id']) @@ -2182,6 +2186,11 @@ def test_resize_revert_through_api(self): instance = db.instance_get_by_uuid(context, instance['uuid']) self.compute_api.revert_resize(context, instance) + + instance = db.instance_get_by_uuid(context, instance['uuid']) + self.assertEqual(instance['vm_state'], vm_states.RESIZING) + self.assertEqual(instance['task_state'], task_states.RESIZE_REVERTING) + self.compute.terminate_instance(context, instance['uuid']) def test_resize_invalid_flavor_fails(self):