From 3fe738afc8dcd6ea328e4c768836f80ffad1c46f Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: 2013年8月12日 14:24:24 -0700 Subject: [PATCH] powervm: make start_lpar timeout This patch makes the start_lpar method timeout like the stop_lpar method. Change-Id: I111ed7ee80f7a9e786d8cb8b02747b5187120858 --- nova/tests/virt/powervm/test_powervm.py | 25 +++++++++++++++++++++++-- nova/virt/powervm/operator.py | 8 +++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/nova/tests/virt/powervm/test_powervm.py b/nova/tests/virt/powervm/test_powervm.py index 2c4c02aa97e0..c0abe0c77095 100644 --- a/nova/tests/virt/powervm/test_powervm.py +++ b/nova/tests/virt/powervm/test_powervm.py @@ -1140,10 +1140,31 @@ class IVMOperatorTestCase(test.TestCase): self.ivm_operator = powervm_operator.IVMOperator(ivm_connection) def test_start_lpar(self): + instance_name = 'fake' self.mox.StubOutWithMock(self.ivm_operator, 'run_vios_command') - self.ivm_operator.run_vios_command('chsysstate -r lpar -o on -n fake') + self.ivm_operator.run_vios_command('chsysstate -r lpar -o on -n %s' % + instance_name) + self.mox.StubOutWithMock(self.ivm_operator, 'get_lpar') + lpar1 = fake_lpar(instance_name) + self.ivm_operator.get_lpar(instance_name).AndReturn(lpar1) self.mox.ReplayAll() - self.ivm_operator.start_lpar('fake') + self.ivm_operator.start_lpar(instance_name) + + def test_start_lpar_timeout(self): + instance_name = 'fake' + # mock the remote command call + self.mox.StubOutWithMock(self.ivm_operator, 'run_vios_command') + self.ivm_operator.run_vios_command('chsysstate -r lpar -o on -n %s' % + instance_name) + self.mox.StubOutWithMock(self.ivm_operator, 'get_lpar') + # the lpar is stopped and the timeout is less than the looping call + # interval so we timeout + lpar1 = fake_lpar(instance_name, state=constants.POWERVM_SHUTDOWN) + self.ivm_operator.get_lpar(instance_name).AndReturn(lpar1) + self.mox.ReplayAll() + self.assertRaises(exception.PowerVMLPAROperationTimeout, + self.ivm_operator.start_lpar, + instance_name=instance_name, timeout=0.5) def test_stop_lpar(self): instance_name = 'fake' diff --git a/nova/virt/powervm/operator.py b/nova/virt/powervm/operator.py index 31496be45189..b9f8c6940cc5 100644 --- a/nova/virt/powervm/operator.py +++ b/nova/virt/powervm/operator.py @@ -553,13 +553,19 @@ class BaseOperator(object): self.run_vios_command(self.command.mksyscfg('-r lpar -i "%s"' % conf_data)) - def start_lpar(self, instance_name): + def start_lpar(self, instance_name, + timeout=constants.POWERVM_LPAR_OPERATION_TIMEOUT): """Start a LPAR instance. :param instance_name: LPAR instance name + :param timeout: value in seconds for specifying + how long to wait for the LPAR to start """ self.run_vios_command(self.command.chsysstate('-r lpar -o on -n %s' % instance_name)) + # poll instance until running or raise exception + self._poll_for_lpar_status(instance_name, constants.POWERVM_RUNNING, + 'start_lpar', timeout) def stop_lpar(self, instance_name, timeout=constants.POWERVM_LPAR_OPERATION_TIMEOUT):

AltStyle によって変換されたページ (->オリジナル) /