Reorder operations in (l3_dvr) update floating ip
This review overrides update_floatingip (L3_NAT_dbonly_mixin) in l3_dvr_db (L3_NAT_with_dvr_db_mixin) to reorder the garbage collection to after the floating ip is updated and rpc called. This was previously being called in the (already) overridden _update_fip_assoc. Since this call is moved, the _update_fip_assoc for l3_dvr_db is exactly the same as l3_db and is thus removed completely. This tidy up was created whilst looking at bug 1381617. The intention was to mitigate the timing issues exposed by [1] and discussed in the bug report. It seems the problem persists with more discussion around 'properly fixing' this at [2]. [1] https://review.openstack.org/#/c/102700/ [2] https://review.openstack.org/#/c/130414/4 Change-Id: I24cef57bf394ceeb931ff48fa67f18218c734b00
This commit is contained in:
parent
3b072ee1d0
commit
334dd0cb99
@ -142,19 +142,17 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin,
|
||||
)
|
||||
)
|
||||
|
||||
def _update_fip_assoc(self, context, fip, floatingip_db, external_port):
|
||||
previous_router_id = floatingip_db.router_id
|
||||
port_id, internal_ip_address, router_id = (
|
||||
self._check_and_get_fip_assoc(context, fip, floatingip_db))
|
||||
def update_floatingip(self, context, id, floatingip):
|
||||
res_fip = super(L3_NAT_with_dvr_db_mixin, self).update_floatingip(
|
||||
context, id, floatingip)
|
||||
admin_ctx = context.elevated()
|
||||
if (not ('port_id' in fip and fip['port_id'])) and (
|
||||
floatingip_db['fixed_port_id'] is not None):
|
||||
fip = floatingip['floatingip']
|
||||
unused_agent_port = (fip.get('port_id', -1) is None and
|
||||
res_fip.get('fixed_port_id'))
|
||||
if unused_agent_port:
|
||||
self.clear_unused_fip_agent_gw_port(
|
||||
admin_ctx, floatingip_db, fip['id'])
|
||||
floatingip_db.update({'fixed_ip_address': internal_ip_address,
|
||||
'fixed_port_id': port_id,
|
||||
'router_id': router_id,
|
||||
'last_known_router_id': previous_router_id})
|
||||
admin_ctx, floatingip, fip['id'])
|
||||
return res_fip
|
||||
|
||||
def clear_unused_fip_agent_gw_port(
|
||||
self, context, floatingip_db, fip_id):
|
||||
|
Loading…
Reference in New Issue
Block a user