diff options
author | Kevin L. Mitchell <kevin.mitchell@rackspace.com> | 2012-07-27 18:49:05 -0500 |
---|---|---|
committer | Kevin L. Mitchell <kevin.mitchell@rackspace.com> | 2012-07-27 18:49:43 -0500 |
commit | 2740ef8f31a98a9b1486af344ef8cb3399e68aa0 (patch) | |
tree | 450746d86fa3c214b2948d51de6b81c6d29211aa | |
parent | ebd97be9d6448298811ffccaf30b886ac08bf49f (diff) | |
download | nova-2740ef8f31a98a9b1486af344ef8cb3399e68aa0.tar.gz nova-2740ef8f31a98a9b1486af344ef8cb3399e68aa0.tar.xz nova-2740ef8f31a98a9b1486af344ef8cb3399e68aa0.zip |
Fix state logic for auto-confirm resizes
In the compute manager, the _poll_unconfirmed_resizes() periodic
task mishandled state checks, and would call confirm_resize() in
invalid states. This patch fixes the logic so that confirm_resize()
is only called if the instance is in vm_state 'resized' and
task_state None. The unit test is also fixed for the proper logic.
Fixes bug 1030175.
Change-Id: I66028b7042d88fb0f1f41df07f42b4b02cf60247
-rw-r--r-- | nova/compute/manager.py | 2 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 9e6407bbf..f41b20a97 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2517,7 +2517,7 @@ class ComputeManager(manager.SchedulerDependentManager): instance=instance) continue if instance['vm_state'] != vm_states.RESIZED \ - and instance['task_state'] != None: + or instance['task_state'] is not None: state = instance['vm_state'] reason = _("In %(state)s vm_state, not RESIZED") _set_migration_to_error(migration_id, reason % locals(), diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index ca595ee6e..40f053cc7 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -1954,16 +1954,19 @@ class ComputeTestCase(BaseTestCase): 'task_state': None}, {'uuid': 'fake_uuid3', 'vm_state': vm_states.ACTIVE, 'task_state': task_states.REBOOTING}, - {'uuid': 'fake_uuid4', 'vm_state': vm_states.ACTIVE, + {'uuid': 'fake_uuid4', 'vm_state': vm_states.RESIZED, 'task_state': None}, {'uuid': 'fake_uuid5', 'vm_state': vm_states.ACTIVE, - 'task_state': None}] + 'task_state': None}, + {'uuid': 'fake_uuid6', 'vm_state': vm_states.RESIZED, + 'task_state': 'deleting'}] expected_migration_status = {'fake_uuid1': 'confirmed', 'noexist': 'error', 'fake_uuid2': 'error', 'fake_uuid3': 'error', 'fake_uuid4': None, - 'fake_uuid5': 'confirmed'} + 'fake_uuid5': 'error', + 'fake_uuid6': 'error'} migrations = [] for i, instance in enumerate(instances, start=1): migrations.append({'id': i, |