From: YAMAMOTO Takashi Date: Fri, 3 Jul 2015 15:04:35 +0000 (+0900) Subject: db_base_plugin_v2: Avoid creating another session X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=f084686fc61c39cd5034b3dbf92a6001b5a0c887;p=openstack-build%2Fneutron-build.git db_base_plugin_v2: Avoid creating another session Instead of get_admin_context(), use context.elevated() to avoid creating another DB session. get_admin_context().session creates an independent DB session, while ctx.elevated().session shares the original context's session. Generally it's better to avoid using multiple DB sessions in a single thread as it's a bad idea for various reasons: - They can yield inconsistent views - They can ends up with a deadlock Change-Id: I5ef54cbabab552bad28a147254372b0cdc022832 --- diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index f417c0477..1704729a9 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -34,7 +34,6 @@ from neutron.common import constants from neutron.common import exceptions as n_exc from neutron.common import ipv6_utils from neutron.common import utils -from neutron import context as ctx from neutron.db import api as db_api from neutron.db import db_base_plugin_common from neutron.db import ipam_non_pluggable_backend @@ -471,7 +470,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, gw_ports = self._get_router_gw_ports_by_network(context, network['id']) router_ids = [p['device_id'] for p in gw_ports] - ctx_admin = ctx.get_admin_context() + ctx_admin = context.elevated() ext_subnets_dict = {s['id']: s for s in network['subnets']} for id in router_ids: router = l3plugin.get_router(ctx_admin, id) @@ -1133,7 +1132,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, if device_id: if hasattr(self, 'get_router'): try: - ctx_admin = ctx.get_admin_context() + ctx_admin = context.elevated() router = self.get_router(ctx_admin, device_id) except l3.RouterNotFound: return @@ -1143,7 +1142,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, service_constants.L3_ROUTER_NAT)) if l3plugin: try: - ctx_admin = ctx.get_admin_context() + ctx_admin = context.elevated() router = l3plugin.get_router(ctx_admin, device_id) except l3.RouterNotFound: