Merge "Update block_device_info to contain swap and ephemeral disks"

This commit is contained in:
Jenkins
2014-05-06 01:31:45 +00:00
committed by Gerrit Code Review
3 changed files with 122 additions and 55 deletions
+38 -29
View File
@@ -705,8 +705,8 @@ class ComputeManager(manager.Manager):
try:
network_info = self._get_instance_nw_info(context,
instance)
bdi = self._get_instance_volume_block_device_info(context,
instance)
bdi = self._get_instance_block_device_info(context,
instance)
destroy_disks = not (self._is_instance_storage_shared(
context, instance))
except exception.InstanceNotFound:
@@ -931,8 +931,8 @@ class ComputeManager(manager.Manager):
power_on = (instance.system_metadata.get('old_vm_state') !=
vm_states.STOPPED)
block_dev_info = self._get_instance_volume_block_device_info(
context, instance)
block_dev_info = self._get_instance_block_device_info(context,
instance)
self.driver.finish_revert_migration(context,
instance, net_info, block_dev_info, power_on)
@@ -962,8 +962,7 @@ class ComputeManager(manager.Manager):
instance=instance)
block_device_info = \
self._get_instance_volume_block_device_info(
context, instance)
self._get_instance_block_device_info(context, instance)
try:
self.driver.resume_state_on_host_boot(
@@ -1817,14 +1816,16 @@ class ComputeManager(manager.Manager):
self.network_api.deallocate_for_instance(
context, instance, requested_networks=requested_networks)
def _get_instance_volume_block_device_info(self, context, instance,
refresh_conn_info=False,
bdms=None):
def _get_instance_block_device_info(self, context, instance,
refresh_conn_info=False,
bdms=None):
"""Transform volumes to the driver block_device format."""
if not bdms:
bdms = (block_device_obj.BlockDeviceMappingList.
get_by_instance_uuid(context, instance['uuid']))
swap = driver_block_device.convert_swap(bdms)
ephemerals = driver_block_device.convert_ephemerals(bdms)
block_device_mapping = (
driver_block_device.convert_volumes(bdms) +
driver_block_device.convert_snapshots(bdms) +
@@ -1842,9 +1843,17 @@ class ComputeManager(manager.Manager):
self.driver)
if self.use_legacy_block_device_info:
swap = driver_block_device.legacy_block_devices(swap)
ephemerals = driver_block_device.legacy_block_devices(ephemerals)
block_device_mapping = driver_block_device.legacy_block_devices(
block_device_mapping)
return {'block_device_mapping': block_device_mapping}
# Get swap out of the list
swap = driver_block_device.get_swap(swap)
return {'swap': swap,
'ephemerals': ephemerals,
'block_device_mapping': block_device_mapping}
# NOTE(mikal): No object_compat wrapper on this method because its
# callers all pass objects already
@@ -2143,7 +2152,7 @@ class ComputeManager(manager.Manager):
# NOTE(vish) get bdms before destroying the instance
vol_bdms = [bdm for bdm in bdms if bdm.is_volume]
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, bdms=bdms)
# NOTE(melwitt): attempt driver destroy before releasing ip, may
@@ -2307,8 +2316,8 @@ class ComputeManager(manager.Manager):
def _power_on(self, context, instance):
network_info = self._get_instance_nw_info(context, instance)
block_device_info = self._get_instance_volume_block_device_info(
context, instance)
block_device_info = self._get_instance_block_device_info(context,
instance)
self.driver.power_on(context, instance,
network_info,
block_device_info)
@@ -2527,7 +2536,7 @@ class ComputeManager(manager.Manager):
get_by_instance_uuid(context, instance.uuid))
block_device_info = \
self._get_instance_volume_block_device_info(
self._get_instance_block_device_info(
context, instance, bdms=bdms)
def detach_block_devices(context, bdms):
@@ -2621,8 +2630,8 @@ class ComputeManager(manager.Manager):
context = context.elevated()
LOG.audit(_("Rebooting instance"), context=context, instance=instance)
block_device_info = self._get_instance_volume_block_device_info(
context, instance)
block_device_info = self._get_instance_block_device_info(context,
instance)
network_info = self._get_instance_nw_info(context, instance)
@@ -3207,7 +3216,7 @@ class ComputeManager(manager.Manager):
network_info = self._get_instance_nw_info(context, instance)
bdms = (block_device_obj.BlockDeviceMappingList.
get_by_instance_uuid(context, instance.uuid))
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, bdms=bdms)
self.driver.destroy(context, instance, network_info,
@@ -3269,7 +3278,7 @@ class ComputeManager(manager.Manager):
self.network_api.setup_networks_on_host(context, instance,
migration['source_compute'])
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, refresh_conn_info=True)
power_on = old_vm_state != vm_states.STOPPED
@@ -3461,7 +3470,7 @@ class ComputeManager(manager.Manager):
bdms = (block_device_obj.BlockDeviceMappingList.
get_by_instance_uuid(context, instance.uuid))
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, bdms=bdms)
disk_info = self.driver.migrate_disk_and_power_off(
@@ -3547,7 +3556,7 @@ class ComputeManager(manager.Manager):
context, instance, "finish_resize.start",
network_info=network_info)
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, refresh_conn_info=True)
# NOTE(mriedem): If the original vm_state was STOPPED, we don't
@@ -3754,7 +3763,7 @@ class ComputeManager(manager.Manager):
LOG.audit(_('Resuming'), context=context, instance=instance)
network_info = self._get_instance_nw_info(context, instance)
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance)
self.driver.resume(context, instance, network_info,
@@ -3840,8 +3849,8 @@ class ComputeManager(manager.Manager):
current_power_state = self._get_power_state(context, instance)
network_info = self._get_instance_nw_info(context, instance)
block_device_info = self._get_instance_volume_block_device_info(
context, instance)
block_device_info = self._get_instance_block_device_info(context,
instance)
self.driver.destroy(context, instance, network_info,
block_device_info)
@@ -4500,7 +4509,7 @@ class ComputeManager(manager.Manager):
required for live migration without shared storage.
"""
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
context, instance, refresh_conn_info=True)
network_info = self._get_instance_nw_info(context, instance)
@@ -4599,7 +4608,7 @@ class ComputeManager(manager.Manager):
ctxt, instance['uuid'])
# Cleanup source host post live-migration
block_device_info = self._get_instance_volume_block_device_info(
block_device_info = self._get_instance_block_device_info(
ctxt, instance, bdms)
self.driver.post_live_migration(ctxt, instance, block_device_info,
migrate_data)
@@ -4711,8 +4720,8 @@ class ComputeManager(manager.Manager):
self._notify_about_instance_usage(
context, instance, "live_migration.post.dest.start",
network_info=network_info)
block_device_info = self._get_instance_volume_block_device_info(
context, instance)
block_device_info = self._get_instance_block_device_info(context,
instance)
self.driver.post_live_migration_at_destination(context, instance,
network_info,
@@ -4809,8 +4818,8 @@ class ComputeManager(manager.Manager):
# NOTE(vish): The mapping is passed in so the driver can disconnect
# from remote volumes if necessary
block_device_info = self._get_instance_volume_block_device_info(
context, instance)
block_device_info = self._get_instance_block_device_info(context,
instance)
self.driver.rollback_live_migration_at_destination(context, instance,
network_info, block_device_info)
self._notify_about_instance_usage(
+79 -21
View File
@@ -2385,7 +2385,7 @@ class ComputeTestCase(BaseTestCase):
fake_network.unset_stub_network_methods(self.stubs)
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute, '_get_instance_nw_info')
self.mox.StubOutWithMock(self.compute, '_notify_about_instance_usage')
self.mox.StubOutWithMock(self.compute, '_instance_update')
@@ -2437,7 +2437,7 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.context, 'elevated')
self.context.elevated().AndReturn(econtext)
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
econtext, instance).AndReturn(fake_block_dev_info)
self.compute._get_instance_nw_info(econtext,
instance).AndReturn(
@@ -2584,7 +2584,7 @@ class ComputeTestCase(BaseTestCase):
self._test_reboot(False, fail_reboot=True,
fail_running=True)
def test_get_instance_volume_block_device_info_source_image(self):
def test_get_instance_block_device_info_source_image(self):
bdms = block_device_obj.block_device_make_list(self.context,
[fake_block_device.FakeDbBlockDeviceDict({
'id': 3,
@@ -2604,10 +2604,12 @@ class ComputeTestCase(BaseTestCase):
return_value=bdms)
) as mock_get_by_instance:
block_device_info = (
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
self.context, self._create_fake_instance())
)
expected = {
'swap': None,
'ephemerals': [],
'block_device_mapping': [{
'connection_info': {
'driver_volume_type': 'rbd'
@@ -2619,7 +2621,7 @@ class ComputeTestCase(BaseTestCase):
self.assertTrue(mock_get_by_instance.called)
self.assertEqual(block_device_info, expected)
def test_get_instance_volume_block_device_info_passed_bdms(self):
def test_get_instance_block_device_info_passed_bdms(self):
bdms = block_device_obj.block_device_make_list(self.context,
[fake_block_device.FakeDbBlockDeviceDict({
'id': 3,
@@ -2633,10 +2635,12 @@ class ComputeTestCase(BaseTestCase):
block_device_obj.BlockDeviceMappingList,
'get_by_instance_uuid')) as mock_get_by_instance:
block_device_info = (
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
self.context, self._create_fake_instance(), bdms=bdms)
)
expected = {
'swap': None,
'ephemerals': [],
'block_device_mapping': [{
'connection_info': {
'driver_volume_type': 'rbd'
@@ -2648,6 +2652,57 @@ class ComputeTestCase(BaseTestCase):
self.assertFalse(mock_get_by_instance.called)
self.assertEqual(block_device_info, expected)
def test_get_instance_block_device_info_swap_and_ephemeral(self):
instance = self._create_fake_instance()
ephemerals = fake_block_device.FakeDbBlockDeviceDict({
'id': 1, 'instance_uuid': 'fake-instance',
'device_name': '/dev/vdb',
'source_type': 'blank',
'destination_type': 'local',
'device_type': 'disk',
'disk_bus': 'virtio',
'delete_on_termination': True,
'guest_format': None,
'volume_size': 1,
'boot_index': -1
})
swap = fake_block_device.FakeDbBlockDeviceDict({
'id': 2, 'instance_uuid': 'fake-instance',
'device_name': '/dev/vdc',
'source_type': 'blank',
'destination_type': 'local',
'device_type': 'disk',
'disk_bus': 'virtio',
'delete_on_termination': True,
'guest_format': 'swap',
'volume_size': 1,
'boot_index': -1
})
bdms = block_device_obj.block_device_make_list(self.context,
[swap, ephemerals])
with (
mock.patch.object(block_device_obj.BlockDeviceMappingList,
'get_by_instance_uuid', return_value=bdms)
) as mock_get_by_instance_uuid:
expected_block_device_info = {
'swap': {'device_name': '/dev/vdc', 'swap_size': 1},
'ephemerals': [{'device_name': '/dev/vdb', 'num': 0, 'size': 1,
'virtual_name': 'ephemeral0'}],
'block_device_mapping': []
}
block_device_info = (
self.compute._get_instance_block_device_info(
self.context, instance)
)
mock_get_by_instance_uuid.assert_called_once_with(self.context,
instance.uuid)
self.assertEqual(expected_block_device_info, block_device_info)
def test_set_admin_password(self):
# Ensure instance can have its admin password set.
instance = jsonutils.to_primitive(self._create_fake_instance())
@@ -4103,7 +4158,7 @@ class ComputeTestCase(BaseTestCase):
'_notify_about_instance_usage')
self.mox.StubOutWithMock(self.compute.driver, 'finish_migration')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(migration, 'save')
self.mox.StubOutWithMock(instance, 'save')
self.mox.StubOutWithMock(self.context, 'elevated')
@@ -4153,7 +4208,7 @@ class ComputeTestCase(BaseTestCase):
self.context, instance, 'finish_resize.start',
network_info='fake-nwinfo1')
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
self.context, instance,
refresh_conn_info=True).AndReturn('fake-bdminfo')
# nova.conf sets the default flavor to m1.small and the test
@@ -4733,7 +4788,7 @@ class ComputeTestCase(BaseTestCase):
mock.patch.object(block_device_obj.BlockDeviceMappingList,
'get_by_instance_uuid', return_value='fake_bdms'),
mock.patch.object(
self.compute, '_get_instance_volume_block_device_info',
self.compute, '_get_instance_block_device_info',
return_value='fake_bdinfo'),
mock.patch.object(self.compute, '_terminate_volume_connections')
) as (mock_get_by_inst_uuid, mock_get_instance_vol_bdinfo,
@@ -5110,7 +5165,8 @@ class ComputeTestCase(BaseTestCase):
# creating mocks
self.mox.StubOutWithMock(self.compute.driver, 'pre_live_migration')
self.compute.driver.pre_live_migration(mox.IsA(c), mox.IsA(instance),
{'block_device_mapping': []},
{'swap': None, 'ephemerals': [],
'block_device_mapping': []},
mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg())
@@ -5352,7 +5408,8 @@ class ComputeTestCase(BaseTestCase):
self.compute._post_live_migration(c, instance, dest)
post_live_migration.assert_has_calls([
mock.call(c, instance, {'block_device_mapping': []}, None)])
mock.call(c, instance, {'swap': None, 'ephemerals': [],
'block_device_mapping': []}, None)])
unfilter_instance.assert_has_calls([mock.call(instance, [])])
migration = {'source_compute': srchost,
'dest_compute': dest, }
@@ -5394,7 +5451,7 @@ class ComputeTestCase(BaseTestCase):
mock.patch.object(self.compute.instance_events,
'clear_events_for_instance'),
mock.patch.object(self.compute,
'_get_instance_volume_block_device_info'),
'_get_instance_block_device_info'),
mock.patch.object(block_device_obj.BlockDeviceMappingList,
'get_by_instance_uuid'),
mock.patch.object(self.compute.driver, 'get_volume_connector'),
@@ -5510,7 +5567,8 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute.driver,
'rollback_live_migration_at_destination')
self.compute.driver.rollback_live_migration_at_destination(c,
instance, [], {'block_device_mapping': []})
instance, [], {'swap': None, 'ephemerals': [],
'block_device_mapping': []})
# start test
self.mox.ReplayAll()
@@ -6201,7 +6259,7 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute,
'_get_instance_nw_info')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute,
'_is_instance_storage_shared')
self.mox.StubOutWithMock(self.compute.driver, 'destroy')
@@ -6211,7 +6269,7 @@ class ComputeTestCase(BaseTestCase):
self.compute._get_instance_nw_info(fake_context,
evacuated_instance).AndReturn(
'fake_network_info')
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
fake_context, evacuated_instance).AndReturn('fake_bdi')
self.compute._is_instance_storage_shared(fake_context,
evacuated_instance).AndReturn(True)
@@ -6248,7 +6306,7 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute,
'_get_instance_nw_info')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute.driver,
'check_instance_shared_storage_local')
self.mox.StubOutWithMock(self.compute.compute_rpcapi,
@@ -6262,7 +6320,7 @@ class ComputeTestCase(BaseTestCase):
self.compute._get_instance_nw_info(fake_context,
evacuated_instance).AndReturn(
'fake_network_info')
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
fake_context, evacuated_instance).AndReturn('fake_bdi')
self.compute.driver.check_instance_shared_storage_local(fake_context,
evacuated_instance).AndReturn({'filename': 'tmpfilename'})
@@ -6304,7 +6362,7 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute,
'_get_instance_nw_info')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute.driver,
'check_instance_shared_storage_local')
self.mox.StubOutWithMock(self.compute.compute_rpcapi,
@@ -6318,7 +6376,7 @@ class ComputeTestCase(BaseTestCase):
self.compute._get_instance_nw_info(fake_context,
evacuated_instance).AndReturn(
'fake_network_info')
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
fake_context, evacuated_instance).AndReturn('fake_bdi')
self.compute.driver.check_instance_shared_storage_local(fake_context,
evacuated_instance).AndRaise(NotImplementedError())
@@ -10195,13 +10253,13 @@ class ComputeRescheduleOrErrorTestCase(BaseTestCase):
mock.patch.object(self.compute, '_get_instance_nw_info',
side_effect=error),
mock.patch.object(self.compute,
'_get_instance_volume_block_device_info'),
'_get_instance_block_device_info'),
mock.patch.object(self.compute.driver, 'destroy'),
mock.patch.object(self.compute, '_try_deallocate_network')
) as (
elevated_mock,
_get_instance_nw_info_mock,
_get_instance_volume_block_device_info_mock,
_get_instance_block_device_info_mock,
destroy_mock,
_try_deallocate_network_mock
):
+5 -5
View File
@@ -287,7 +287,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
self.mox.StubOutWithMock(self.compute.driver,
'resume_state_on_host_boot')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute,
'_set_instance_error_state')
self.compute._get_power_state(mox.IgnoreArg(),
@@ -297,7 +297,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
self.compute._get_power_state(mox.IgnoreArg(),
instance).AndReturn(power_state.SHUTDOWN)
self.compute.driver.plug_vifs(instance, mox.IgnoreArg())
self.compute._get_instance_volume_block_device_info(mox.IgnoreArg(),
self.compute._get_instance_block_device_info(mox.IgnoreArg(),
instance).AndReturn('fake-bdm')
self.compute.driver.resume_state_on_host_boot(mox.IgnoreArg(),
instance, mox.IgnoreArg(),
@@ -351,7 +351,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
self.mox.StubOutWithMock(self.compute.driver,
'finish_revert_migration')
self.mox.StubOutWithMock(self.compute,
'_get_instance_volume_block_device_info')
'_get_instance_block_device_info')
self.mox.StubOutWithMock(self.compute.driver, 'get_info')
self.mox.StubOutWithMock(instance, 'save')
self.mox.StubOutWithMock(self.compute, '_retry_reboot')
@@ -361,7 +361,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
compute_utils.get_nw_info_for_instance(instance).AndReturn(
network_model.NetworkInfo())
self.compute.driver.plug_vifs(instance, [])
self.compute._get_instance_volume_block_device_info(
self.compute._get_instance_block_device_info(
self.context, instance).AndReturn([])
self.compute.driver.finish_revert_migration(self.context, instance,
[], [], power_on)
@@ -1907,7 +1907,7 @@ class ComputeManagerMigrationTestCase(test.NoDBTestCase):
mock.patch.object(self.instance, 'save'),
mock.patch.object(self.compute, '_notify_about_instance_usage'),
mock.patch.object(self.compute,
'_get_instance_volume_block_device_info',
'_get_instance_block_device_info',
return_value=None),
mock.patch.object(block_device_obj.BlockDeviceMappingList,
'get_by_instance_uuid',