]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
db_base_plugin_v2: Avoid creating another session
authorYAMAMOTO Takashi <yamamoto@midokura.com>
Fri, 3 Jul 2015 15:04:35 +0000 (00:04 +0900)
committerYAMAMOTO Takashi <yamamoto@midokura.com>
Mon, 10 Aug 2015 03:00:25 +0000 (03:00 +0000)
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

neutron/db/db_base_plugin_v2.py

index f417c04775cbc2bddf91ce64d20cd910b951f97e..1704729a956d59ec9e33bee2cafb2f204b750416 100644 (file)
@@ -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: