diff --git a/gbpservice/common/utils.py b/gbpservice/common/utils.py index 9742fc677..c97c659b2 100644 --- a/gbpservice/common/utils.py +++ b/gbpservice/common/utils.py @@ -50,6 +50,12 @@ def get_current_context(): return get_obj_from_stack(n_context.Context) +def get_current_session(): + ctx = get_current_context() + if ctx: + return ctx.session + + def get_resource_plural(resource): if resource.endswith('y'): resource_plural = resource.replace('y', 'ies') diff --git a/gbpservice/neutron/db/api.py b/gbpservice/neutron/db/api.py index e9a25f6f0..964d6c3cf 100644 --- a/gbpservice/neutron/db/api.py +++ b/gbpservice/neutron/db/api.py @@ -20,9 +20,6 @@ # corresponding to the newest neutron branch supported by this # repository. -from sqlalchemy import inspect - -import neutron.objects.base as n_base from neutron_lib.db import api get_context_manager = api.get_context_manager @@ -33,14 +30,3 @@ retry_db_errors = api.retry_db_errors retry_if_session_inactive = api.retry_if_session_inactive CONTEXT_READER = api.CONTEXT_READER CONTEXT_WRITER = api.CONTEXT_WRITER - - -def get_session_from_obj(db_obj): - # Support OVOs - if isinstance(db_obj, n_base.NeutronObject): - db_obj = db_obj.db_obj - try: - instance = inspect(db_obj) - return instance.session - except Exception: - return None diff --git a/gbpservice/neutron/plugins/ml2plus/patch_neutron.py b/gbpservice/neutron/plugins/ml2plus/patch_neutron.py index 7edcc8021..cabe4c4a2 100644 --- a/gbpservice/neutron/plugins/ml2plus/patch_neutron.py +++ b/gbpservice/neutron/plugins/ml2plus/patch_neutron.py @@ -36,6 +36,10 @@ extensions.get_extensions_path = get_extensions_path from gbpservice.common import utils as gbp_utils +def get_current_session(): + return gbp_utils.get_current_session() + + from neutron_lib import context as nlib_ctx diff --git a/gbpservice/neutron/plugins/ml2plus/plugin.py b/gbpservice/neutron/plugins/ml2plus/plugin.py index 11e381698..ee2409ff5 100644 --- a/gbpservice/neutron/plugins/ml2plus/plugin.py +++ b/gbpservice/neutron/plugins/ml2plus/plugin.py @@ -17,6 +17,7 @@ # that the patches are applied before any of the # modules save a reference to the functions being patched from gbpservice.neutron.extensions import patch # noqa +from gbpservice.neutron.plugins.ml2plus import patch_neutron # noqa from neutron.common import constants as n_const from neutron.common import utils as n_utils @@ -163,15 +164,11 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @resource_extend.extends([net_def.COLLECTION_NAME]) def _ml2_md_extend_network_dict(result, netdb): plugin = directory.get_plugin() - session = db_api.get_session_from_obj(netdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() # REVISIT: Check if transaction begin is still # required here, and if so, if reader pattern # can be used instead (will require getting the - # current context, which should be available in - # the session.info's dictionary, with a key of - # 'using_context'). + # current context) with session.begin(subtransactions=True): plugin.extension_manager.extend_network_dict( session, netdb, result) @@ -179,11 +176,8 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @staticmethod @resource_extend.extends([net_def.COLLECTION_NAME + '_BULK']) def _ml2_md_extend_network_dict_bulk(results, _): - netdb = results[0][1] if results else None plugin = directory.get_plugin() - session = db_api.get_session_from_obj(netdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() with session.begin(subtransactions=True): plugin.extension_manager.extend_network_dict_bulk(session, results) @@ -191,15 +185,11 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @resource_extend.extends([port_def.COLLECTION_NAME]) def _ml2_md_extend_port_dict(result, portdb): plugin = directory.get_plugin() - session = db_api.get_session_from_obj(portdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() # REVISIT: Check if transaction begin is still # required here, and if so, if reader pattern # can be used instead (will require getting the - # current context, which should be available in - # the session.info's dictionary, with a key of - # 'using_context'). + # current context) with session.begin(subtransactions=True): plugin.extension_manager.extend_port_dict( session, portdb, result) @@ -207,11 +197,8 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @staticmethod @resource_extend.extends([port_def.COLLECTION_NAME + '_BULK']) def _ml2_md_extend_port_dict_bulk(results, _): - portdb = results[0][1] if results else None plugin = directory.get_plugin() - session = db_api.get_session_from_obj(portdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() with session.begin(subtransactions=True): plugin.extension_manager.extend_port_dict_bulk(session, results) @@ -219,15 +206,11 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @resource_extend.extends([subnet_def.COLLECTION_NAME]) def _ml2_md_extend_subnet_dict(result, subnetdb): plugin = directory.get_plugin() - session = db_api.get_session_from_obj(subnetdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() # REVISIT: Check if transaction begin is still # required here, and if so, if reader pattern # can be used instead (will require getting the - # current context, which should be available in - # the session.info's dictionary, with a key of - # 'using_context'). + # current context) with session.begin(subtransactions=True): plugin.extension_manager.extend_subnet_dict( session, subnetdb, result) @@ -235,11 +218,8 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @staticmethod @resource_extend.extends([subnet_def.COLLECTION_NAME + '_BULK']) def _ml2_md_extend_subnet_dict_bulk(results, _): - subnetdb = results[0][1] if results else None plugin = directory.get_plugin() - session = db_api.get_session_from_obj(subnetdb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() with session.begin(subtransactions=True): plugin.extension_manager.extend_subnet_dict_bulk(session, results) @@ -247,15 +227,11 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @resource_extend.extends([subnetpool_def.COLLECTION_NAME]) def _ml2_md_extend_subnetpool_dict(result, subnetpooldb): plugin = directory.get_plugin() - session = db_api.get_session_from_obj(subnetpooldb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() # REVISIT: Check if transaction begin is still # required here, and if so, if reader pattern # can be used instead (will require getting the - # current context, which should be available in - # the session.info's dictionary, with a key of - # 'using_context'). + # current context) with session.begin(subtransactions=True): plugin.extension_manager.extend_subnetpool_dict( session, subnetpooldb, result) @@ -263,11 +239,8 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @staticmethod @resource_extend.extends([subnetpool_def.COLLECTION_NAME + '_BULK']) def _ml2_md_extend_subnetpool_dict_bulk(results, _): - subnetpooldb = results[0][1] if results else None plugin = directory.get_plugin() - session = db_api.get_session_from_obj(subnetpooldb) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() with session.begin(subtransactions=True): plugin.extension_manager.extend_subnetpool_dict_bulk(session, results) @@ -276,15 +249,11 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @resource_extend.extends([as_def.COLLECTION_NAME]) def _ml2_md_extend_address_scope_dict(result, address_scope): plugin = directory.get_plugin() - session = db_api.get_session_from_obj(address_scope) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() # REVISIT: Check if transaction begin is still # required here, and if so, if reader pattern # can be used instead (will require getting the - # current context, which should be available in - # the session.info's dictionary, with a key of - # 'using_context'). + # current context) with session.begin(subtransactions=True): plugin.extension_manager.extend_address_scope_dict( session, address_scope, result) @@ -292,11 +261,8 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin, @staticmethod @resource_extend.extends([as_def.COLLECTION_NAME + '_BULK']) def _ml2_md_extend_address_scope_dict_bulk(results, _): - address_scope = results[0][1] if results else None plugin = directory.get_plugin() - session = db_api.get_session_from_obj(address_scope) - if not session: - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() with session.begin(subtransactions=True): plugin.extension_manager.extend_address_scope_dict_bulk(session, results) diff --git a/gbpservice/neutron/services/apic_aim/l3_plugin.py b/gbpservice/neutron/services/apic_aim/l3_plugin.py index 1e3bb4900..205d4bf06 100644 --- a/gbpservice/neutron/services/apic_aim/l3_plugin.py +++ b/gbpservice/neutron/services/apic_aim/l3_plugin.py @@ -42,6 +42,7 @@ from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import ( extension_db as extn_db) from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import ( mechanism_driver as md) +from gbpservice.neutron.plugins.ml2plus import patch_neutron # noqa LOG = logging.getLogger(__name__) @@ -107,7 +108,7 @@ class ApicL3Plugin(common_db_mixin.CommonDbMixin, if not routers: return plugin = directory.get_plugin(constants.L3) - session = db_api.get_writer_session() + session = patch_neutron.get_current_session() try: plugin._md.extend_router_dict_bulk(session, routers) plugin._include_router_extn_attr_bulk(session, routers)