From 6211543493418509d5d1ace1a1ef55a3eebcd6b2 Mon Sep 17 00:00:00 2001 From: jichenjc Date: Mon, 2 May 2016 10:59:40 +0800 Subject: [PATCH] Avoid unnessary _get_power_state call the result of _get_power_state can be reused and no need to call it twice which don't have any state change. Change-Id: I3c495031d98b35734f37139ac1b1c3a4d25d0a8f Closes-Bug: 1589960 --- nova/compute/manager.py | 6 +- nova/tests/unit/compute/test_compute_mgr.py | 66 ++++++++------------- 2 files changed, 29 insertions(+), 43 deletions(-) diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 5c245862786b..c5a045a8197d 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -874,8 +874,9 @@ class ComputeManager(manager.Manager): self._set_instance_obj_error_state(context, instance) return - try_reboot, reboot_type = self._retry_reboot(context, instance) current_power_state = self._get_power_state(context, instance) + try_reboot, reboot_type = self._retry_reboot(context, instance, + current_power_state) if try_reboot: LOG.debug("Instance in transitional state (%(task_state)s) at " @@ -1038,8 +1039,7 @@ class ComputeManager(manager.Manager): LOG.debug('Hypervisor driver does not support ' 'firewall rules', instance=instance) - def _retry_reboot(self, context, instance): - current_power_state = self._get_power_state(context, instance) + def _retry_reboot(self, context, instance, current_power_state): current_task_state = instance.task_state retry_reboot = False reboot_type = compute_utils.get_reboot_type(current_task_state, diff --git a/nova/tests/unit/compute/test_compute_mgr.py b/nova/tests/unit/compute/test_compute_mgr.py index 9b299764df6e..47a721aff5f8 100644 --- a/nova/tests/unit/compute/test_compute_mgr.py +++ b/nova/tests/unit/compute/test_compute_mgr.py @@ -643,8 +643,6 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase): instance).AndReturn(power_state.SHUTDOWN) self.compute._get_power_state(mox.IgnoreArg(), instance).AndReturn(power_state.SHUTDOWN) - self.compute._get_power_state(mox.IgnoreArg(), - instance).AndReturn(power_state.SHUTDOWN) self.compute.driver.plug_vifs(instance, mox.IgnoreArg()) self.compute._get_instance_block_device_info(mox.IgnoreArg(), instance).AndReturn('fake-bdm') @@ -840,8 +838,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase): self.mox.StubOutWithMock(instance, 'save') self.mox.StubOutWithMock(self.compute, '_retry_reboot') - self.compute._retry_reboot(self.context, instance).AndReturn( - (False, None)) + self.compute._retry_reboot(self.context, instance, + power_state.SHUTDOWN).AndReturn((False, None)) compute_utils.get_nw_info_for_instance(instance).AndReturn( network_model.NetworkInfo()) self.compute.driver.plug_vifs(instance, []) @@ -2213,68 +2211,56 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase): instance.uuid = uuids.instance instance.task_state = task_states.REBOOT_PENDING instance.vm_state = vm_states.ACTIVE - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.RUNNING): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertTrue(allow_reboot) - self.assertEqual(reboot_type, 'SOFT') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.RUNNING) + self.assertTrue(allow_reboot) + self.assertEqual(reboot_type, 'SOFT') def test_retry_reboot_pending_hard(self): instance = objects.Instance(self.context) instance.uuid = uuids.instance instance.task_state = task_states.REBOOT_PENDING_HARD instance.vm_state = vm_states.ACTIVE - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.RUNNING): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertTrue(allow_reboot) - self.assertEqual(reboot_type, 'HARD') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.RUNNING) + self.assertTrue(allow_reboot) + self.assertEqual(reboot_type, 'HARD') def test_retry_reboot_starting_soft_off(self): instance = objects.Instance(self.context) instance.uuid = uuids.instance instance.task_state = task_states.REBOOT_STARTED - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.NOSTATE): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertTrue(allow_reboot) - self.assertEqual(reboot_type, 'HARD') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.NOSTATE) + self.assertTrue(allow_reboot) + self.assertEqual(reboot_type, 'HARD') def test_retry_reboot_starting_hard_off(self): instance = objects.Instance(self.context) instance.uuid = uuids.instance instance.task_state = task_states.REBOOT_STARTED_HARD - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.NOSTATE): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertTrue(allow_reboot) - self.assertEqual(reboot_type, 'HARD') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.NOSTATE) + self.assertTrue(allow_reboot) + self.assertEqual(reboot_type, 'HARD') def test_retry_reboot_starting_hard_on(self): instance = objects.Instance(self.context) instance.uuid = uuids.instance instance.task_state = task_states.REBOOT_STARTED_HARD - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.RUNNING): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertFalse(allow_reboot) - self.assertEqual(reboot_type, 'HARD') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.RUNNING) + self.assertFalse(allow_reboot) + self.assertEqual(reboot_type, 'HARD') def test_retry_reboot_no_reboot(self): instance = objects.Instance(self.context) instance.uuid = uuids.instance instance.task_state = 'bar' - with mock.patch.object(self.compute, '_get_power_state', - return_value=power_state.RUNNING): - allow_reboot, reboot_type = self.compute._retry_reboot( - context, instance) - self.assertFalse(allow_reboot) - self.assertEqual(reboot_type, 'HARD') + allow_reboot, reboot_type = self.compute._retry_reboot( + context, instance, power_state.RUNNING) + self.assertFalse(allow_reboot) + self.assertEqual(reboot_type, 'HARD') @mock.patch('nova.objects.BlockDeviceMapping.get_by_volume_and_instance') @mock.patch('nova.compute.manager.ComputeManager._driver_detach_volume')