NSX|V: treat edge cases with edge deletions

- When doing a deletion is a async task we create a new context
to deal with that deletion
- We add some additional logs

Change-Id: I9a707d1292858428ab51295167360bfa26513430
This commit is contained in:
Gary Kotton 2017-06-14 23:56:29 -07:00
parent f9e7b86b96
commit dd43e222e3
2 changed files with 10 additions and 4 deletions

View File

@ -17,6 +17,7 @@ import random
import time
from neutron_lib import constants as lib_const
from neutron_lib import context as q_context
from oslo_config import cfg
from oslo_log import log as logging
from oslo_serialization import jsonutils
@ -530,9 +531,14 @@ class EdgeApplianceDriver(object):
LOG.error("Failed to resize edge: %s", e.response)
def delete_edge(self, context, router_id, edge_id, dist=False):
LOG.debug("Deleting edge %s", edge_id)
if context is None:
context = q_context.get_admin_context()
try:
LOG.debug("Deleting router binding %s", router_id)
nsxv_db.delete_nsxv_router_binding(context.session, router_id)
if not dist:
LOG.debug("Deleting vnic bindings for edge %s", edge_id)
nsxv_db.clean_edge_vnic_binding(context.session, edge_id)
except sa_exc.NoResultFound:
LOG.warning("Router Binding for %s not found", router_id)

View File

@ -292,7 +292,7 @@ class EdgeManager(object):
context.session, router_binding['router_id'],
status=constants.PENDING_DELETE)
self._get_worker_pool().spawn_n(
self.nsxv_manager.delete_edge, q_context.get_admin_context(),
self.nsxv_manager.delete_edge, None,
router_binding['router_id'], router_binding['edge_id'],
dist=(router_binding['edge_type'] == nsxv_constants.VDR_EDGE))
@ -308,7 +308,7 @@ class EdgeManager(object):
LOG.debug("Start deleting extra edge: %s in pool",
binding['edge_id'])
self._get_worker_pool().spawn_n(
self.nsxv_manager.delete_edge, q_context.get_admin_context(),
self.nsxv_manager.delete_edge, None,
binding['router_id'], binding['edge_id'],
dist=(binding['edge_type'] == nsxv_constants.VDR_EDGE))
@ -775,7 +775,7 @@ class EdgeManager(object):
# delete edge
self._get_worker_pool().spawn_n(
self.nsxv_manager.delete_edge,
q_context.get_admin_context(),
None,
router_id, edge_id, dist=dist)
return
@ -814,7 +814,7 @@ class EdgeManager(object):
# delete edge
self._get_worker_pool().spawn_n(
self.nsxv_manager.delete_edge,
q_context.get_admin_context(),
None,
router_id, edge_id, dist=dist)
def _allocate_dhcp_edge_appliance(self, context, resource_id,