Merge "PowerOn of a partition in paused state not working"
This commit is contained in:
commit
25d9590853
|
@ -45,6 +45,14 @@ def fake_session():
|
|||
'maximum-memory': 512,
|
||||
'ifl-processors': 3
|
||||
})
|
||||
cpc1.partitions.add({
|
||||
'name': 'OpenStack-foo-cccccccc-cccc-cccc-cccc-cccccccccccc',
|
||||
'description': 'OpenStack CPCSubset=foo',
|
||||
'initial-memory': 1,
|
||||
'status': 'paused',
|
||||
'maximum-memory': 512,
|
||||
'ifl-processors': 3
|
||||
})
|
||||
cpc1.partitions.add({
|
||||
'name': 'OpenStack-foo-6511ee0f-0d64-4392-aaaa-bbbbbbbbbbbb',
|
||||
'description': 'OpenStack CPCSubset=foo',
|
||||
|
@ -283,6 +291,14 @@ class VmPartitionInstanceTestCase(TestCase):
|
|||
'object-uri') + '/hbas/1',
|
||||
self.partition_inst.get_boot_hba_uri())
|
||||
|
||||
def test_power_on_vm_when_paused(self):
|
||||
instance = instance_obj.Instance()
|
||||
instance.uuid = 'cccccccc-cccc-cccc-cccc-cccccccccccc'
|
||||
partition_inst = vm.PartitionInstance(instance, self.cpc)
|
||||
partition_inst.power_on_vm()
|
||||
self.assertEqual(
|
||||
'active', partition_inst.get_partition().get_property('status'))
|
||||
|
||||
def test_destroy_stopped_partition(self):
|
||||
instance = instance_obj.Instance()
|
||||
instance.save = mock.Mock()
|
||||
|
@ -340,6 +356,12 @@ class PartitionInstanceInfoTestCase(TestCase):
|
|||
def test_state(self):
|
||||
self.assertEqual(power_state.RUNNING, self.instance_partition.state)
|
||||
|
||||
def test_paused_partition_state(self):
|
||||
instance = instance_obj.Instance()
|
||||
instance.uuid = 'cccccccc-cccc-cccc-cccc-cccccccccccc'
|
||||
instance_partition = vm.PartitionInstanceInfo(instance, self.cpc)
|
||||
self.assertEqual(power_state.SHUTDOWN, instance_partition.state)
|
||||
|
||||
def test_mem(self):
|
||||
self.assertEqual(1, self.instance_partition.mem)
|
||||
|
||||
|
|
|
@ -38,12 +38,22 @@ CONF = conf.CONF
|
|||
OPENSTACK_PREFIX = 'OpenStack'
|
||||
CPCSUBSET_PREFIX = 'CPCSubset='
|
||||
|
||||
STARTED_STATUSES = (
|
||||
utils.PartitionState.RUNNING,
|
||||
utils.PartitionState.DEGRADED,
|
||||
utils.PartitionState.RESERVATION_ERROR)
|
||||
STOPPED_STATUSES = (
|
||||
utils.PartitionState.STOPPED,
|
||||
utils.PartitionState.TERMINATED,
|
||||
utils.PartitionState.PAUSED)
|
||||
|
||||
|
||||
DPM_TO_NOVA_STATE = {
|
||||
utils.PartitionState.RUNNING: power_state.RUNNING,
|
||||
utils.PartitionState.STOPPED: power_state.SHUTDOWN,
|
||||
utils.PartitionState.UNKNOWN: power_state.NOSTATE,
|
||||
utils.PartitionState.PAUSED: power_state.PAUSED,
|
||||
# operation to get out of the "paused" status is "stop"
|
||||
utils.PartitionState.PAUSED: power_state.SHUTDOWN,
|
||||
utils.PartitionState.STARTING: power_state.PAUSED
|
||||
}
|
||||
|
||||
|
@ -324,10 +334,29 @@ class PartitionInstance(object):
|
|||
|
||||
def power_on_vm(self):
|
||||
LOG.debug('Partition power on triggered')
|
||||
self.partition.start(True)
|
||||
# TODO(preethipy): The below method to be removed once the bug
|
||||
# on DPM(701894) is fixed to return correct status on API return
|
||||
self._loop_status_update(5, 'Active')
|
||||
|
||||
self._ensure_status_transitioned()
|
||||
|
||||
if self.partition.get_property(
|
||||
'status') == utils.PartitionState.PAUSED:
|
||||
self.partition.stop(True)
|
||||
self.partition.wait_for_status(
|
||||
status=utils.PartitionState.STOPPED, status_timeout=60)
|
||||
|
||||
if self.partition.get_property('status') not in STARTED_STATUSES:
|
||||
self.partition.start(True)
|
||||
self.partition.wait_for_status(
|
||||
status=STARTED_STATUSES, status_timeout=60)
|
||||
|
||||
def _ensure_status_transitioned(self):
|
||||
partition_state = self.partition.get_property('status')
|
||||
|
||||
if partition_state == utils.PartitionState.STARTING:
|
||||
self.partition.wait_for_status(
|
||||
status=STARTED_STATUSES, status_timeout=60)
|
||||
elif partition_state == utils.PartitionState.SHUTTING_DOWN:
|
||||
self.partition.wait_for_status(
|
||||
status=STOPPED_STATUSES, status_timeout=60)
|
||||
|
||||
def power_off_vm(self):
|
||||
LOG.debug('Partition power off triggered')
|
||||
|
|
Loading…
Reference in New Issue