enginefacade: 'vif' and 'task_log'

Use enginefacade in 'vif' and 'task_log' sections.

Implements: blueprint new-oslodb-enginefacade

Co-Authored-By: Sergey Nikitin <snikitin@mirantis.com>

Change-Id: I377e2b22eea0cc18d3727e8fb6e869d48c3608bc
This commit is contained in:
Pavel Kholkin 2015-12-18 15:48:12 +03:00
parent 7758f77082
commit 1ac60f9e11
5 changed files with 43 additions and 24 deletions

View File

@ -620,10 +620,9 @@ def virtual_interface_get_by_uuid(context, vif_uuid):
return IMPL.virtual_interface_get_by_uuid(context, vif_uuid)
def virtual_interface_get_by_instance(context, instance_id, use_slave=False):
def virtual_interface_get_by_instance(context, instance_id):
"""Gets all virtual_interfaces for instance."""
return IMPL.virtual_interface_get_by_instance(context, instance_id,
use_slave=use_slave)
return IMPL.virtual_interface_get_by_instance(context, instance_id)
def virtual_interface_get_by_instance_and_network(context, instance_id,

View File

@ -1446,6 +1446,7 @@ def _fixed_ip_count_by_project(context, project_id, session=None):
@require_context
@main_context_manager.writer
def virtual_interface_create(context, values):
"""Create a new virtual interface record in the database.
@ -1454,19 +1455,19 @@ def virtual_interface_create(context, values):
try:
vif_ref = models.VirtualInterface()
vif_ref.update(values)
vif_ref.save()
vif_ref.save(context.session)
except db_exc.DBError:
raise exception.VirtualInterfaceCreateException()
return vif_ref
def _virtual_interface_query(context, session=None, use_slave=False):
return model_query(context, models.VirtualInterface, session=session,
read_deleted="no", use_slave=use_slave)
def _virtual_interface_query(context):
return model_query(context, models.VirtualInterface, read_deleted="no")
@require_context
@main_context_manager.reader
def virtual_interface_get(context, vif_id):
"""Gets a virtual interface from the table.
@ -1479,6 +1480,7 @@ def virtual_interface_get(context, vif_id):
@require_context
@main_context_manager.reader
def virtual_interface_get_by_address(context, address):
"""Gets a virtual interface from the table.
@ -1496,6 +1498,7 @@ def virtual_interface_get_by_address(context, address):
@require_context
@main_context_manager.reader
def virtual_interface_get_by_uuid(context, vif_uuid):
"""Gets a virtual interface from the table.
@ -1509,12 +1512,13 @@ def virtual_interface_get_by_uuid(context, vif_uuid):
@require_context
@require_instance_exists_using_uuid
def virtual_interface_get_by_instance(context, instance_uuid, use_slave=False):
@main_context_manager.reader.allow_async
def virtual_interface_get_by_instance(context, instance_uuid):
"""Gets all virtual interfaces for instance.
:param instance_uuid: = uuid of the instance to retrieve vifs for
"""
vif_refs = _virtual_interface_query(context, use_slave=use_slave).\
vif_refs = _virtual_interface_query(context).\
filter_by(instance_uuid=instance_uuid).\
order_by(asc("created_at"), asc("id")).\
all()
@ -1522,6 +1526,7 @@ def virtual_interface_get_by_instance(context, instance_uuid, use_slave=False):
@require_context
@main_context_manager.reader
def virtual_interface_get_by_instance_and_network(context, instance_uuid,
network_id):
"""Gets virtual interface for instance that's associated with network."""
@ -1533,6 +1538,7 @@ def virtual_interface_get_by_instance_and_network(context, instance_uuid,
@require_context
@main_context_manager.writer
def virtual_interface_delete_by_instance(context, instance_uuid):
"""Delete virtual interface records that are associated
with the instance given by instance_id.
@ -1545,6 +1551,7 @@ def virtual_interface_delete_by_instance(context, instance_uuid):
@require_context
@main_context_manager.reader
def virtual_interface_get_all(context):
"""Get all vifs."""
vif_refs = _virtual_interface_query(context).all()
@ -5951,13 +5958,16 @@ def _ec2_instance_get_query(context, session=None):
read_deleted='yes')
##################
def _task_log_get_query(context, task_name, period_beginning,
period_ending, host=None, state=None, session=None):
period_ending, host=None, state=None):
values = {'period_beginning': period_beginning,
'period_ending': period_ending}
values = convert_objects_related_datetimes(values, *values.keys())
query = model_query(context, models.TaskLog, session=session).\
query = model_query(context, models.TaskLog).\
filter_by(task_name=task_name).\
filter_by(period_beginning=values['period_beginning']).\
filter_by(period_ending=values['period_ending'])
@ -5968,18 +5978,21 @@ def _task_log_get_query(context, task_name, period_beginning,
return query
@main_context_manager.reader
def task_log_get(context, task_name, period_beginning, period_ending, host,
state=None):
return _task_log_get_query(context, task_name, period_beginning,
period_ending, host, state).first()
@main_context_manager.reader
def task_log_get_all(context, task_name, period_beginning, period_ending,
host=None, state=None):
return _task_log_get_query(context, task_name, period_beginning,
period_ending, host, state).all()
@main_context_manager.writer
def task_log_begin_task(context, task_name, period_beginning, period_ending,
host, task_items=None, message=None):
values = {'period_beginning': period_beginning,
@ -5997,25 +6010,26 @@ def task_log_begin_task(context, task_name, period_beginning, period_ending,
if task_items:
task.task_items = task_items
try:
task.save()
task.save(context.session)
except db_exc.DBDuplicateEntry:
raise exception.TaskAlreadyRunning(task_name=task_name, host=host)
@main_context_manager.writer
def task_log_end_task(context, task_name, period_beginning, period_ending,
host, errors, message=None):
values = dict(state="DONE", errors=errors)
if message:
values["message"] = message
session = get_session()
with session.begin():
rows = _task_log_get_query(context, task_name, period_beginning,
period_ending, host, session=session).\
update(values)
if rows == 0:
# It's not running!
raise exception.TaskNotRunning(task_name=task_name, host=host)
rows = _task_log_get_query(context, task_name, period_beginning,
period_ending, host).update(values)
if rows == 0:
# It's not running!
raise exception.TaskNotRunning(task_name=task_name, host=host)
##################
def _archive_deleted_rows_for_table(tablename, max_rows):

View File

@ -93,9 +93,15 @@ class VirtualInterfaceList(base.ObjectListBase, base.NovaObject):
return base.obj_make_list(context, cls(context),
objects.VirtualInterface, db_vifs)
@staticmethod
@db.select_db_reader_mode
def _db_virtual_interface_get_by_instance(context, instance_uuid,
use_slave=False):
return db.virtual_interface_get_by_instance(context, instance_uuid)
@base.remotable_classmethod
def get_by_instance_uuid(cls, context, instance_uuid, use_slave=False):
db_vifs = db.virtual_interface_get_by_instance(context, instance_uuid,
use_slave=use_slave)
db_vifs = cls._db_virtual_interface_get_by_instance(
context, instance_uuid, use_slave=use_slave)
return base.obj_make_list(context, cls(context),
objects.VirtualInterface, db_vifs)

View File

@ -138,7 +138,7 @@ class ApiTestCase(test.TestCase):
self.assertEqual(123, vifs[0].network_id)
self.assertEqual(str(mock.sentinel.network_uuid), vifs[0].net_uuid)
mock_get_by_instance.assert_called_once_with(
self.context, str(mock.sentinel.inst_uuid), use_slave=False)
self.context, str(mock.sentinel.inst_uuid))
mock_get_by_id.assert_called_once_with(self.context, 123,
project_only='allow_none')

View File

@ -3207,7 +3207,7 @@ class FloatingIPTestCase(test.TestCase):
# SQLite doesn't seem to honor the uniqueness constraint on the
# address column, so fake the collision-avoidance here
def fake_vif_save(vif):
def fake_vif_save(vif, session=None):
if vif.address == crash_test_dummy_vif['address']:
raise db_exc.DBError("If you're smart, you'll retry!")
# NOTE(russellb) The VirtualInterface object requires an ID to be