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:
Sergey Nikitin 2015-12-28 18:37:44 +03:00 committed by Pavel Kholkin
parent 806113e4f4
commit b07b36fb56
7 changed files with 71 additions and 62 deletions

View File

@ -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,

View File

@ -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).\

View File

@ -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 [])

View File

@ -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()

View File

@ -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(

View File

@ -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(),

View File

@ -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):