enginefacade: 'block_device_mapping'
Use enginefacade in 'block_device_mapping' section. Implements: blueprint new-oslodb-enginefacade Co-Authored-By: Pavel Kholkin <pkholkin@mirantis.com> Change-Id: I497287751c2bf28bdb9458387ad494f8735f0a9b
This commit is contained in:
parent
806113e4f4
commit
b07b36fb56
|
@ -1209,20 +1209,16 @@ def block_device_mapping_update_or_create(context, values, legacy=True):
|
|||
return IMPL.block_device_mapping_update_or_create(context, values, legacy)
|
||||
|
||||
|
||||
def block_device_mapping_get_all_by_instance_uuids(context, instance_uuids,
|
||||
use_slave=False):
|
||||
def block_device_mapping_get_all_by_instance_uuids(context, instance_uuids):
|
||||
"""Get all block device mapping belonging to a list of instances."""
|
||||
return IMPL.block_device_mapping_get_all_by_instance_uuids(context,
|
||||
instance_uuids,
|
||||
use_slave)
|
||||
instance_uuids)
|
||||
|
||||
|
||||
def block_device_mapping_get_all_by_instance(context, instance_uuid,
|
||||
use_slave=False):
|
||||
def block_device_mapping_get_all_by_instance(context, instance_uuid):
|
||||
"""Get all block device mapping belonging to an instance."""
|
||||
return IMPL.block_device_mapping_get_all_by_instance(context,
|
||||
instance_uuid,
|
||||
use_slave)
|
||||
instance_uuid)
|
||||
|
||||
|
||||
def block_device_mapping_get_all_by_volume_id(context, volume_id,
|
||||
|
|
|
@ -3915,13 +3915,11 @@ def ec2_snapshot_get_by_uuid(context, snapshot_uuid):
|
|||
###################
|
||||
|
||||
|
||||
def _block_device_mapping_get_query(context, session=None,
|
||||
columns_to_join=None, use_slave=False):
|
||||
def _block_device_mapping_get_query(context, columns_to_join=None):
|
||||
if columns_to_join is None:
|
||||
columns_to_join = []
|
||||
|
||||
query = model_query(context, models.BlockDeviceMapping,
|
||||
session=session, use_slave=use_slave)
|
||||
query = model_query(context, models.BlockDeviceMapping)
|
||||
|
||||
for column in columns_to_join:
|
||||
query = query.options(joinedload(column))
|
||||
|
@ -3949,6 +3947,7 @@ def _from_legacy_values(values, legacy, allow_updates=False):
|
|||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_create(context, values, legacy=True):
|
||||
_scrub_empty_str_values(values, ['volume_size'])
|
||||
values = _from_legacy_values(values, legacy)
|
||||
|
@ -3956,11 +3955,12 @@ def block_device_mapping_create(context, values, legacy=True):
|
|||
|
||||
bdm_ref = models.BlockDeviceMapping()
|
||||
bdm_ref.update(values)
|
||||
bdm_ref.save()
|
||||
bdm_ref.save(context.session)
|
||||
return bdm_ref
|
||||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_update(context, bdm_id, values, legacy=True):
|
||||
_scrub_empty_str_values(values, ['volume_size'])
|
||||
values = _from_legacy_values(values, legacy, allow_updates=True)
|
||||
|
@ -3971,62 +3971,59 @@ def block_device_mapping_update(context, bdm_id, values, legacy=True):
|
|||
return query.first()
|
||||
|
||||
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_update_or_create(context, values, legacy=True):
|
||||
_scrub_empty_str_values(values, ['volume_size'])
|
||||
values = _from_legacy_values(values, legacy, allow_updates=True)
|
||||
convert_objects_related_datetimes(values)
|
||||
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
result = None
|
||||
# NOTE(xqueralt): Only update a BDM when device_name was provided. We
|
||||
# allow empty device names so they will be set later by the manager.
|
||||
if values['device_name']:
|
||||
query = _block_device_mapping_get_query(context, session=session)
|
||||
result = query.filter_by(instance_uuid=values['instance_uuid'],
|
||||
device_name=values['device_name']).first()
|
||||
result = None
|
||||
# NOTE(xqueralt): Only update a BDM when device_name was provided. We
|
||||
# allow empty device names so they will be set later by the manager.
|
||||
if values['device_name']:
|
||||
query = _block_device_mapping_get_query(context)
|
||||
result = query.filter_by(instance_uuid=values['instance_uuid'],
|
||||
device_name=values['device_name']).first()
|
||||
|
||||
if result:
|
||||
result.update(values)
|
||||
else:
|
||||
# Either the device_name doesn't exist in the database yet, or no
|
||||
# device_name was provided. Both cases mean creating a new BDM.
|
||||
result = models.BlockDeviceMapping(**values)
|
||||
result.save(session=session)
|
||||
if result:
|
||||
result.update(values)
|
||||
else:
|
||||
# Either the device_name doesn't exist in the database yet, or no
|
||||
# device_name was provided. Both cases mean creating a new BDM.
|
||||
result = models.BlockDeviceMapping(**values)
|
||||
result.save(context.session)
|
||||
|
||||
# NOTE(xqueralt): Prevent from having multiple swap devices for the
|
||||
# same instance. This will delete all the existing ones.
|
||||
if block_device.new_format_is_swap(values):
|
||||
query = _block_device_mapping_get_query(context, session=session)
|
||||
query = query.filter_by(instance_uuid=values['instance_uuid'],
|
||||
source_type='blank', guest_format='swap')
|
||||
query = query.filter(models.BlockDeviceMapping.id != result.id)
|
||||
query.soft_delete()
|
||||
# NOTE(xqueralt): Prevent from having multiple swap devices for the
|
||||
# same instance. This will delete all the existing ones.
|
||||
if block_device.new_format_is_swap(values):
|
||||
query = _block_device_mapping_get_query(context)
|
||||
query = query.filter_by(instance_uuid=values['instance_uuid'],
|
||||
source_type='blank', guest_format='swap')
|
||||
query = query.filter(models.BlockDeviceMapping.id != result.id)
|
||||
query.soft_delete()
|
||||
|
||||
return result
|
||||
return result
|
||||
|
||||
|
||||
@require_context
|
||||
def block_device_mapping_get_all_by_instance_uuids(context, instance_uuids,
|
||||
use_slave=False):
|
||||
@main_context_manager.reader.allow_async
|
||||
def block_device_mapping_get_all_by_instance_uuids(context, instance_uuids):
|
||||
if not instance_uuids:
|
||||
return []
|
||||
return _block_device_mapping_get_query(
|
||||
context, use_slave=use_slave
|
||||
).filter(
|
||||
models.BlockDeviceMapping.instance_uuid.in_(instance_uuids)
|
||||
).all()
|
||||
return _block_device_mapping_get_query(context).filter(
|
||||
models.BlockDeviceMapping.instance_uuid.in_(instance_uuids)).all()
|
||||
|
||||
|
||||
@require_context
|
||||
def block_device_mapping_get_all_by_instance(context, instance_uuid,
|
||||
use_slave=False):
|
||||
return _block_device_mapping_get_query(context, use_slave=use_slave).\
|
||||
@main_context_manager.reader.allow_async
|
||||
def block_device_mapping_get_all_by_instance(context, instance_uuid):
|
||||
return _block_device_mapping_get_query(context).\
|
||||
filter_by(instance_uuid=instance_uuid).\
|
||||
all()
|
||||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.reader
|
||||
def block_device_mapping_get_all_by_volume_id(context, volume_id,
|
||||
columns_to_join=None):
|
||||
return _block_device_mapping_get_query(context,
|
||||
|
@ -4036,6 +4033,7 @@ def block_device_mapping_get_all_by_volume_id(context, volume_id,
|
|||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.reader
|
||||
def block_device_mapping_get_by_instance_and_volume_id(context, volume_id,
|
||||
instance_uuid,
|
||||
columns_to_join=None):
|
||||
|
@ -4047,6 +4045,7 @@ def block_device_mapping_get_by_instance_and_volume_id(context, volume_id,
|
|||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_destroy(context, bdm_id):
|
||||
_block_device_mapping_get_query(context).\
|
||||
filter_by(id=bdm_id).\
|
||||
|
@ -4054,6 +4053,7 @@ def block_device_mapping_destroy(context, bdm_id):
|
|||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_destroy_by_instance_and_volume(context, instance_uuid,
|
||||
volume_id):
|
||||
_block_device_mapping_get_query(context).\
|
||||
|
@ -4063,6 +4063,7 @@ def block_device_mapping_destroy_by_instance_and_volume(context, instance_uuid,
|
|||
|
||||
|
||||
@require_context
|
||||
@main_context_manager.writer
|
||||
def block_device_mapping_destroy_by_instance_and_device(context, instance_uuid,
|
||||
device_name):
|
||||
_block_device_mapping_get_query(context).\
|
||||
|
|
|
@ -322,17 +322,31 @@ class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject):
|
|||
return base.obj_make_dict_of_lists(
|
||||
context, cls, bdms, 'instance_uuid')
|
||||
|
||||
@staticmethod
|
||||
@db.select_db_reader_mode
|
||||
def _db_block_device_mapping_get_all_by_instance_uuids(
|
||||
context, instance_uuids, use_slave=False):
|
||||
return db.block_device_mapping_get_all_by_instance_uuids(
|
||||
context, instance_uuids)
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_instance_uuids(cls, context, instance_uuids, use_slave=False):
|
||||
db_bdms = db.block_device_mapping_get_all_by_instance_uuids(
|
||||
context, instance_uuids, use_slave=use_slave)
|
||||
db_bdms = cls._db_block_device_mapping_get_all_by_instance_uuids(
|
||||
context, instance_uuids, use_slave=use_slave)
|
||||
return base.obj_make_list(
|
||||
context, cls(), objects.BlockDeviceMapping, db_bdms or [])
|
||||
|
||||
@staticmethod
|
||||
@db.select_db_reader_mode
|
||||
def _db_block_device_mapping_get_all_by_instance(
|
||||
context, instance_uuid, use_slave=False):
|
||||
return db.block_device_mapping_get_all_by_instance(
|
||||
context, instance_uuid)
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_instance_uuid(cls, context, instance_uuid, use_slave=False):
|
||||
db_bdms = db.block_device_mapping_get_all_by_instance(
|
||||
context, instance_uuid, use_slave=use_slave)
|
||||
db_bdms = cls._db_block_device_mapping_get_all_by_instance(
|
||||
context, instance_uuid, use_slave=use_slave)
|
||||
return base.obj_make_list(
|
||||
context, cls(), objects.BlockDeviceMapping, db_bdms or [])
|
||||
|
||||
|
|
|
@ -1011,8 +1011,7 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
self.mox.StubOutWithMock(rpcapi, 'terminate_instance')
|
||||
|
||||
db.block_device_mapping_get_all_by_instance(self.context,
|
||||
inst.uuid,
|
||||
use_slave=False).AndReturn([])
|
||||
inst.uuid).AndReturn([])
|
||||
inst.save()
|
||||
self.compute_api._create_reservations(self.context,
|
||||
inst, inst.task_state,
|
||||
|
@ -1147,7 +1146,7 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
self.useFixture(utils_fixture.TimeFixture(delete_time))
|
||||
|
||||
db.block_device_mapping_get_all_by_instance(
|
||||
self.context, inst.uuid, use_slave=False).AndReturn([])
|
||||
self.context, inst.uuid).AndReturn([])
|
||||
inst.save().AndRaise(test.TestingException)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
|
|
@ -104,7 +104,7 @@ class ComputeValidateDeviceTestCase(test.NoDBTestCase):
|
|||
self.data = []
|
||||
|
||||
self.stubs.Set(db, 'block_device_mapping_get_all_by_instance',
|
||||
lambda context, instance, use_slave=False: self.data)
|
||||
lambda context, instance: self.data)
|
||||
|
||||
def _validate_device(self, device=None):
|
||||
bdms = objects.BlockDeviceMappingList.get_by_instance_uuid(
|
||||
|
|
|
@ -431,7 +431,7 @@ class _BaseTaskTestCase(object):
|
|||
[{'host': 'host1', 'nodename': 'node1', 'limits': []},
|
||||
{'host': 'host2', 'nodename': 'node2', 'limits': []}])
|
||||
db.block_device_mapping_get_all_by_instance(self.context,
|
||||
instances[0].uuid, use_slave=False).AndReturn([])
|
||||
instances[0].uuid).AndReturn([])
|
||||
self.conductor_manager.compute_rpcapi.build_and_run_instance(
|
||||
self.context,
|
||||
instance=mox.IgnoreArg(),
|
||||
|
@ -452,7 +452,7 @@ class _BaseTaskTestCase(object):
|
|||
block_device_mapping=mox.IgnoreArg(),
|
||||
node='node1', limits=[])
|
||||
db.block_device_mapping_get_all_by_instance(self.context,
|
||||
instances[1].uuid, use_slave=False).AndReturn([])
|
||||
instances[1].uuid).AndReturn([])
|
||||
self.conductor_manager.compute_rpcapi.build_and_run_instance(
|
||||
self.context,
|
||||
instance=mox.IgnoreArg(),
|
||||
|
|
|
@ -208,7 +208,6 @@ class MetadataTestCase(test.TestCase):
|
|||
|
||||
def test_format_instance_mapping(self):
|
||||
# Make sure that _format_instance_mappings works.
|
||||
ctxt = None
|
||||
instance_ref0 = objects.Instance(**{'id': 0,
|
||||
'uuid': 'e5fe5518-0288-4fa3-b0c4-c79764101b85',
|
||||
'root_device_name': None,
|
||||
|
@ -220,7 +219,7 @@ class MetadataTestCase(test.TestCase):
|
|||
'default_ephemeral_device': None,
|
||||
'default_swap_device': None})
|
||||
|
||||
def fake_bdm_get(ctxt, uuid, use_slave=False):
|
||||
def fake_bdm_get(ctxt, uuid):
|
||||
return [fake_block_device.FakeDbBlockDeviceDict(
|
||||
{'volume_id': 87654321,
|
||||
'snapshot_id': None,
|
||||
|
@ -259,9 +258,9 @@ class MetadataTestCase(test.TestCase):
|
|||
|
||||
conductor_api.LocalAPI()
|
||||
|
||||
self.assertEqual(base._format_instance_mapping(ctxt,
|
||||
self.assertEqual(base._format_instance_mapping(self.context,
|
||||
instance_ref0), block_device._DEFAULT_MAPPINGS)
|
||||
self.assertEqual(base._format_instance_mapping(ctxt,
|
||||
self.assertEqual(base._format_instance_mapping(self.context,
|
||||
instance_ref1), expected)
|
||||
|
||||
def test_pubkey(self):
|
||||
|
|
Loading…
Reference in New Issue