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
This commit is contained in:
Aaron Rosen 2014-03-04 19:19:40 -08:00
parent 457412f2cf
commit ca970382de

View File

@ -18,6 +18,7 @@ from oslo.config import cfg
from neutron.common import constants from neutron.common import constants
from neutron.common import utils from neutron.common import utils
from neutron import context as neutron_context from neutron import context as neutron_context
from neutron.extensions import l3
from neutron.extensions import portbindings from neutron.extensions import portbindings
from neutron import manager from neutron import manager
from neutron.openstack.common import jsonutils from neutron.openstack.common import jsonutils
@ -104,9 +105,13 @@ class L3RpcCallbackMixin(object):
LOG.debug(_("New status for floating IP %(floatingip_id)s: " LOG.debug(_("New status for floating IP %(floatingip_id)s: "
"%(status)s"), {'floatingip_id': floatingip_id, "%(status)s"), {'floatingip_id': floatingip_id,
'status': status}) 'status': status})
try:
l3_plugin.update_floatingip_status(context, l3_plugin.update_floatingip_status(context,
floatingip_id, floatingip_id,
status) 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 # Find all floating IPs known to have been the given router
# for which an update was not received. Set them DOWN mercilessly # for which an update was not received. Set them DOWN mercilessly
# This situation might occur for some asynchronous backends if # This situation might occur for some asynchronous backends if