NSX|V3: Add codes to handle corner cases in native DHCP support

1. delete_network failed because native DHCP port was manually deleted
2. create_subnet was rolled back, but old entries still exist in backend

Change-Id: I9e28438ff5a7eab9489a921d834eab8a65044aa4
This commit is contained in:
Shih-Hao Li 2016-08-23 12:43:51 -07:00
parent 82fea9652b
commit 99638abd8f

View File

@ -897,6 +897,12 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
# LogicalDhcpServer on the backend. Then create the corresponding
# logical port for the Neutron port with DHCP attachment as the
# LogicalDhcpServer UUID.
# Delete obsolete settings if exist. This could happen when a
# previous failed transaction was rolled back. But the backend
# entries are still there.
self._disable_native_dhcp(context, network['id'])
port_data = {
"name": "",
"admin_state_up": True,
@ -964,9 +970,16 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
return
if dhcp_service['port_id']:
self.delete_port(context, dhcp_service['port_id'])
try:
self.delete_port(context, dhcp_service['port_id'])
except Exception:
# This could happen when the port has been manually deleted.
LOG.error(_LE("Failed to delete DHCP port %(port)s for "
"network %(network)s"),
{'port': dhcp_service['port_id'],
'network': network_id})
else:
LOG.error(_LE("Unable to find DHCP port for network %s"),
LOG.error(_LE("DHCP port is not configured for network %s"),
network_id)
try: