From f5ad3bced3788fea89a4a25a29053d51aeb7a3b2 Mon Sep 17 00:00:00 2001 From: Brian Elliott Date: Wed, 12 Sep 2012 00:49:07 +0000 Subject: Reset task state before rescheduling Reset the task state to SCHEDULING before attempting re-scheduling. This is a precaution to make sure subsequent calls to update the task state see an 'expected_task_state'. bug 1049897 Change-Id: I5667a88487bd7039eb2e0aaebef532199d8b31ef --- nova/compute/manager.py | 5 +++++ nova/tests/compute/test_compute.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 9fc3104d0..3ad68176b 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -569,6 +569,11 @@ class ComputeManager(manager.SchedulerDependentManager): LOG.debug(_("Re-scheduling instance: attempt %d"), retry['num_attempts'], instance_uuid=instance_uuid) + + # reset the task state: + self._instance_update(context, instance_uuid, + task_state=task_states.SCHEDULING) + self.scheduler_rpcapi.run_instance(context, request_spec, admin_password, injected_files, requested_networks, is_first_time, filter_properties) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index f47a5b99d..27fd90146 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -5038,6 +5038,10 @@ class ComputeReschedulingTestCase(BaseTestCase): self._reschedule = self._reschedule_partial() + def fake_update(*args, **kwargs): + self.updated_task_state = kwargs.get('task_state') + self.stubs.Set(self.compute, '_instance_update', fake_update) + def _reschedule_partial(self): uuid = "12-34-56-78-90" @@ -5072,6 +5076,7 @@ class ComputeReschedulingTestCase(BaseTestCase): self.assertTrue(self._reschedule(filter_properties=filter_properties, request_spec=request_spec)) self.assertEqual(1, len(request_spec['instance_uuids'])) + self.assertEqual(self.updated_task_state, task_states.SCHEDULING) class ThatsNoOrdinaryRabbitException(Exception): -- cgit