From 5becbbec6a686667925f399904cebd97b583c35a Mon Sep 17 00:00:00 2001 From: Jakub Libosvar Date: Thu, 3 Oct 2013 19:45:09 +0200 Subject: [PATCH] Removing rpc communication from db transaction In a transaction context of ExtraRoute_db_mixin.update_router() was called super method that uses subtransaction and communication with l3 agent. In case of agent's heartbeat happens while there is running transaction, update heartbeat in agents table gets stuck in a deadlock. Closes-Bug: #1211915 Change-Id: I96e6a9d7172d5a0e3e720a81fcd10f04c40aef07 --- neutron/db/extraroute_db.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/neutron/db/extraroute_db.py b/neutron/db/extraroute_db.py index af5b9102e..55ae98696 100644 --- a/neutron/db/extraroute_db.py +++ b/neutron/db/extraroute_db.py @@ -71,13 +71,11 @@ class ExtraRoute_db_mixin(l3_db.L3_NAT_db_mixin): #check if route exists and have permission to access router_db = self._get_router(context, id) if 'routes' in r: - self._update_extra_routes(context, - router_db, - r['routes']) - router_updated = super(ExtraRoute_db_mixin, self).update_router( - context, id, router) - router_updated['routes'] = self._get_extra_routes_by_router_id( - context, id) + self._update_extra_routes(context, router_db, r['routes']) + routes = self._get_extra_routes_by_router_id(context, id) + router_updated = super(ExtraRoute_db_mixin, self).update_router( + context, id, router) + router_updated['routes'] = routes return router_updated -- 2.45.2