Merge "cleanup private bdm methods"

This commit is contained in:
Zuul 2018-01-09 16:38:34 +00:00 committed by Gerrit Code Review
commit a7ff73de7c
2 changed files with 28 additions and 39 deletions

View File

@ -323,7 +323,7 @@ class TestPowerVMDriver(test.NoDBTestCase):
# _vol_drv_iter not called from spawn because not recreate; but still # _vol_drv_iter not called from spawn because not recreate; but still
# called from _add_volume_connection_tasks. # called from _add_volume_connection_tasks.
mock_vdi.assert_has_calls([mock.call( mock_vdi.assert_has_calls([mock.call(
'context', self.inst, bdms=[], 'context', self.inst, [],
stg_ftsk=self.build_tx_feed.return_value)]) stg_ftsk=self.build_tx_feed.return_value)])
# Assert the correct tasks were called # Assert the correct tasks were called
self.assertTrue(mock_plug_vifs.called) self.assertTrue(mock_plug_vifs.called)
@ -586,7 +586,7 @@ class TestPowerVMDriver(test.NoDBTestCase):
# _add_volume_connection_tasks. # _add_volume_connection_tasks.
# TODO(IBM): Find a way to make the call just once. Unless it's cheap. # TODO(IBM): Find a way to make the call just once. Unless it's cheap.
mock_vol_drv_iter.assert_has_calls([mock.call( mock_vol_drv_iter.assert_has_calls([mock.call(
'context', self.inst, bdms=[], 'context', self.inst, [],
stg_ftsk=self.build_tx_feed.return_value)] * 2) stg_ftsk=self.build_tx_feed.return_value)] * 2)
mock_build_slot_mgr.assert_called_once_with( mock_build_slot_mgr.assert_called_once_with(
self.inst, self.drv.store_api, adapter=self.drv.adapter, self.inst, self.drv.store_api, adapter=self.drv.adapter,
@ -889,7 +889,7 @@ class TestPowerVMDriver(test.NoDBTestCase):
return_value=vals) as mock_vdi: return_value=vals) as mock_vdi:
self.drv._add_volume_connection_tasks( self.drv._add_volume_connection_tasks(
'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr') 'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr')
mock_vdi.assert_called_once_with('context', 'instance', bdms='bdms', mock_vdi.assert_called_once_with('context', 'instance', 'bdms',
stg_ftsk='stg_ftsk') stg_ftsk='stg_ftsk')
mock_conn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'), mock_conn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'),
mock.call(vol_drv2, 'slot_mgr')]) mock.call(vol_drv2, 'slot_mgr')])
@ -909,7 +909,7 @@ class TestPowerVMDriver(test.NoDBTestCase):
return_value=vals) as mock_vdi: return_value=vals) as mock_vdi:
self.drv._add_volume_disconnection_tasks( self.drv._add_volume_disconnection_tasks(
'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr') 'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr')
mock_vdi.assert_called_once_with('context', 'instance', bdms='bdms', mock_vdi.assert_called_once_with('context', 'instance', 'bdms',
stg_ftsk='stg_ftsk') stg_ftsk='stg_ftsk')
mock_disconn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'), mock_disconn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'),
mock.call(vol_drv2, 'slot_mgr')]) mock.call(vol_drv2, 'slot_mgr')])
@ -1913,43 +1913,36 @@ class TestPowerVMDriver(test.NoDBTestCase):
def test_vol_drv_iter(self): def test_vol_drv_iter(self):
block_device_info = self._fake_bdms() block_device_info = self._fake_bdms()
bdms = self.drv._extract_bdm(block_device_info)
vol_adpt = mock.Mock() vol_adpt = mock.Mock()
def _get_results(block_device_info=None, bdms=None): def _get_results(bdms):
# Patch so we get the same mock back each time. # Patch so we get the same mock back each time.
with mock.patch('nova_powervm.virt.powervm.volume.' with mock.patch('nova_powervm.virt.powervm.volume.'
'build_volume_driver', return_value=vol_adpt): 'build_volume_driver', return_value=vol_adpt):
return [ return [
(bdm, vol_drv) for bdm, vol_drv in self.drv._vol_drv_iter( (bdm, vol_drv) for bdm, vol_drv in self.drv._vol_drv_iter(
'context', self.inst, 'context', self.inst, bdms)]
block_device_info=block_device_info, bdms=bdms)]
def validate(results): results = _get_results(bdms)
# For each good call, we should get back two bdms / vol_adpt self.assertEqual(
self.assertEqual( 'fake_vol1',
'fake_vol1', results[0][0]['connection_info']['data']['volume_id'])
results[0][0]['connection_info']['data']['volume_id']) self.assertEqual(vol_adpt, results[0][1])
self.assertEqual(vol_adpt, results[0][1]) self.assertEqual(
self.assertEqual( 'fake_vol2',
'fake_vol2', results[1][0]['connection_info']['data']['volume_id'])
results[1][0]['connection_info']['data']['volume_id']) self.assertEqual(vol_adpt, results[1][1])
self.assertEqual(vol_adpt, results[1][1])
# Send block device info # Test with empty bdms
results = _get_results(block_device_info=block_device_info) self.assertEqual([], _get_results([]))
validate(results)
# Same results with bdms
results = _get_results(bdms=self.drv._extract_bdm(block_device_info))
validate(results)
# Empty bdms
self.assertEqual([], _get_results(bdms=[]))
def test_build_vol_drivers(self): def test_build_vol_drivers(self):
# This utility just returns a list of drivers from the _vol_drv_iter() # This utility just returns a list of drivers from the _vol_drv_iter()
# iterator so mock it and ensure the drivers are returned. # iterator so mock it and ensure the drivers are returned.
vals = [('bdm0', 'drv0'), ('bdm1', 'drv1')] vals = [('bdm0', 'drv0'), ('bdm1', 'drv1')]
with mock.patch.object(self.drv, '_vol_drv_iter', return_value=vals): with mock.patch.object(self.drv, '_vol_drv_iter', return_value=vals):
drivers = self.drv._build_vol_drivers('context', 'instance') drivers = self.drv._build_vol_drivers('context', 'instance', None)
self.assertEqual(['drv0', 'drv1'], drivers) self.assertEqual(['drv0', 'drv1'], drivers)

View File

@ -396,7 +396,7 @@ class PowerVMDriver(driver.ComputeDriver):
# Build the PowerVM Slot lookup map. Only the recreate action needs # Build the PowerVM Slot lookup map. Only the recreate action needs
# the volume driver iterator (to look up volumes and their client # the volume driver iterator (to look up volumes and their client
# mappings). # mappings).
vol_drv_iter = (self._vol_drv_iter(context, instance, bdms=bdms, vol_drv_iter = (self._vol_drv_iter(context, instance, bdms,
stg_ftsk=stg_ftsk) stg_ftsk=stg_ftsk)
if recreate else None) if recreate else None)
slot_mgr = slot.build_slot_mgr( slot_mgr = slot.build_slot_mgr(
@ -497,7 +497,7 @@ class PowerVMDriver(driver.ComputeDriver):
:param slot_mgr: A NovaSlotManager. Used to store/retrieve the client :param slot_mgr: A NovaSlotManager. Used to store/retrieve the client
slots used when a volume is attached to a VM. slots used when a volume is attached to a VM.
""" """
for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms=bdms, for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms,
stg_ftsk=stg_ftsk): stg_ftsk=stg_ftsk):
# First connect the volume. This will update the # First connect the volume. This will update the
# connection_info. # connection_info.
@ -523,7 +523,7 @@ class PowerVMDriver(driver.ComputeDriver):
slots used when a volume is detached from a VM. slots used when a volume is detached from a VM.
""" """
# TODO(thorst) Do we need to do something on the disconnect for slots? # TODO(thorst) Do we need to do something on the disconnect for slots?
for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms=bdms, for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms,
stg_ftsk=stg_ftsk): stg_ftsk=stg_ftsk):
flow.add(tf_stg.DisconnectVolume(vol_drv, slot_mgr)) flow.add(tf_stg.DisconnectVolume(vol_drv, slot_mgr))
@ -1170,7 +1170,7 @@ class PowerVMDriver(driver.ComputeDriver):
slot_mgr = slot.build_slot_mgr( slot_mgr = slot.build_slot_mgr(
instance, self.store_api, adapter=self.adapter, instance, self.store_api, adapter=self.adapter,
vol_drv_iter=self._vol_drv_iter( vol_drv_iter=self._vol_drv_iter(
context, instance, bdms=bdms, stg_ftsk=stg_ftsk)) context, instance, bdms, stg_ftsk=stg_ftsk))
# Determine if there are volumes to disconnect. If so, remove each # Determine if there are volumes to disconnect. If so, remove each
# volume (within the transaction manager) # volume (within the transaction manager)
@ -1267,7 +1267,7 @@ class PowerVMDriver(driver.ComputeDriver):
slot_mgr = slot.build_slot_mgr( slot_mgr = slot.build_slot_mgr(
instance, self.store_api, adapter=self.adapter, instance, self.store_api, adapter=self.adapter,
vol_drv_iter=self._vol_drv_iter( vol_drv_iter=self._vol_drv_iter(
context, instance, bdms=bdms, stg_ftsk=stg_ftsk)) context, instance, bdms, stg_ftsk=stg_ftsk))
else: else:
stg_ftsk = None stg_ftsk = None
@ -1665,12 +1665,9 @@ class PowerVMDriver(driver.ComputeDriver):
mig.post_live_migration_at_destination(network_info, vol_drvs) mig.post_live_migration_at_destination(network_info, vol_drvs)
del self.live_migrations[instance.uuid] del self.live_migrations[instance.uuid]
def _vol_drv_iter(self, context, instance, block_device_info=None, def _vol_drv_iter(self, context, instance, bdms, stg_ftsk=None):
bdms=None, stg_ftsk=None):
"""Yields a bdm and volume driver.""" """Yields a bdm and volume driver."""
# Get a volume driver for each volume # Get a volume driver for each volume
if not bdms:
bdms = self._extract_bdm(block_device_info)
for bdm in bdms or []: for bdm in bdms or []:
conn_info = bdm.get('connection_info') conn_info = bdm.get('connection_info')
# if it doesn't have connection_info, it's not a volume # if it doesn't have connection_info, it's not a volume
@ -1682,13 +1679,12 @@ class PowerVMDriver(driver.ComputeDriver):
stg_ftsk=stg_ftsk) stg_ftsk=stg_ftsk)
yield bdm, vol_drv yield bdm, vol_drv
def _build_vol_drivers(self, context, instance, block_device_info=None, def _build_vol_drivers(self, context, instance, block_device_info):
bdms=None, stg_ftsk=None):
"""Builds the volume connector drivers for a block device info.""" """Builds the volume connector drivers for a block device info."""
# Get a volume driver for each volume # Get a volume driver for each volume
bdms = self._extract_bdm(block_device_info)
return [vol_drv for bdm, vol_drv in self._vol_drv_iter( return [vol_drv for bdm, vol_drv in self._vol_drv_iter(
context, instance, block_device_info=block_device_info, bdms=bdms, context, instance, bdms)]
stg_ftsk=stg_ftsk)]
def unfilter_instance(self, instance, network_info): def unfilter_instance(self, instance, network_info):
"""Stop filtering instance.""" """Stop filtering instance."""