From ca970382de23e4b6ad549c7802b44024d49aa81b Mon Sep 17 00:00:00 2001 From: Aaron Rosen Date: Tue, 4 Mar 2014 19:19:40 -0800 Subject: [PATCH] Fix race condition in update_floatingip_statuses If a floatingip is deleted before update_floatingip_statuses() is processed FloatingIPNotFound is raised. Change-Id: Idf03fda75ccd147673169c24e79921ca6d8fe754 Closes-bug: #1288036 --- neutron/db/l3_rpc_base.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/neutron/db/l3_rpc_base.py b/neutron/db/l3_rpc_base.py index 26b06ed232..d86d956989 100644 --- a/neutron/db/l3_rpc_base.py +++ b/neutron/db/l3_rpc_base.py @@ -18,6 +18,7 @@ from oslo.config import cfg from neutron.common import constants from neutron.common import utils from neutron import context as neutron_context +from neutron.extensions import l3 from neutron.extensions import portbindings from neutron import manager from neutron.openstack.common import jsonutils @@ -104,9 +105,13 @@ class L3RpcCallbackMixin(object): LOG.debug(_("New status for floating IP %(floatingip_id)s: " "%(status)s"), {'floatingip_id': floatingip_id, 'status': status}) - l3_plugin.update_floatingip_status(context, - floatingip_id, - status) + try: + l3_plugin.update_floatingip_status(context, + floatingip_id, + status) + except l3.FloatingIPNotFound: + LOG.debug(_("Floating IP: %s no longer present."), + floatingip_id) # Find all floating IPs known to have been the given router # for which an update was not received. Set them DOWN mercilessly # This situation might occur for some asynchronous backends if