From 79bd3896d00aaea75ef3262e59c5db09c3b05c94 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 af5b9102eb..55ae98696f 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