From 3d87436acbe0e0196389197d358f2ef109f3317a Mon Sep 17 00:00:00 2001 From: Kobi Samoray Date: Wed, 27 Jul 2016 16:00:47 +0300 Subject: [PATCH] NSXv - eliminate task use from delete_interface Delete interface calls should be synchronous. Change-Id: I78169ac54f7b3b21719f2477eea48b56e1b4a0ba --- .../nsx_v/drivers/shared_router_driver.py | 3 +- .../nsx_v/vshield/edge_appliance_driver.py | 33 ++++--------------- .../plugins/nsx_v/vshield/edge_utils.py | 18 +++------- 3 files changed, 13 insertions(+), 41 deletions(-) diff --git a/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py b/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py index f8df7b9b95..31323d9ef3 100644 --- a/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py +++ b/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py @@ -629,8 +629,7 @@ class RouterSharedDriver(router_driver.RouterBaseDriver): if intf_net_id: intf_net_ids.remove(intf_net_id) for net_id in intf_net_ids: - edge_utils.delete_interface(self.nsx_v, context, router_id, net_id, - is_wait=False) + edge_utils.delete_interface(self.nsx_v, context, router_id, net_id) def _update_router_gw_info(self, context, router_id, info, is_routes_update=False, diff --git a/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py b/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py index c48cccd161..5c1d24e702 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py +++ b/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py @@ -358,39 +358,20 @@ class EdgeApplianceDriver(object): # avoid bug 1389358 self.check_edge_jobs(edge_id) - def _delete_interface(self, task): - edge_id = task.userdata['edge_id'] - vnic_index = task.userdata['vnic_index'] - LOG.debug("start deleting vnic %s", vnic_index) + def delete_interface(self, router_id, edge_id, index, jobdata=None): + LOG.debug("Deleting vnic %(vnic_index)s: on edge %(edge_id)s", + {'vnic_index': index, 'edge_id': edge_id}) try: - self.vcns.delete_interface(edge_id, vnic_index) + self.vcns.delete_interface(edge_id, index) except exceptions.VcnsApiException: with excutils.save_and_reraise_exception(): LOG.exception(_LE("Failed to delete vnic %(vnic_index)s: " "on edge %(edge_id)s"), - {'vnic_index': vnic_index, + {'vnic_index': index, 'edge_id': edge_id}) - except Exception: - with excutils.save_and_reraise_exception(): - LOG.exception(_LE("Failed to delete vnic %d"), vnic_index) - return task_constants.TaskStatus.COMPLETED - - def delete_interface(self, router_id, edge_id, index, jobdata=None): - task_name = "delete-interface-%s-%d" % (edge_id, index) - userdata = { - 'router_id': router_id, - 'edge_id': edge_id, - 'vnic_index': index, - 'jobdata': jobdata - } - task = tasks.Task(task_name, router_id, self._delete_interface, - userdata=userdata) - task.add_result_monitor(self.callbacks.interface_delete_result) - self.task_manager.add(task) - # avoid bug 1389358 - self.check_edge_jobs(edge_id) - return task + LOG.debug("Deletion complete vnic %(vnic_index)s: on edge %(edge_id)s", + {'vnic_index': index, 'edge_id': edge_id}) def _deploy_edge(self, task): userdata = task.userdata diff --git a/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py b/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py index dd2d3bf4ec..967a3ffad8 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py +++ b/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py @@ -1524,9 +1524,7 @@ class EdgeManager(object): plr_id, plr_edge_id, None, []) task.wait(task_const.TaskState.RESULT) # Delete internal vnic - task = self.nsxv_manager.delete_interface( - plr_id, plr_edge_id, plr_vnic_index) - task.wait(task_const.TaskState.RESULT) + self.nsxv_manager.delete_interface(plr_id, plr_edge_id, plr_vnic_index) nsxv_db.free_edge_vnic_by_network( context.session, plr_edge_id, lswitch_id) # Delete the PLR @@ -2180,15 +2178,14 @@ def _update_vdr_internal_interface(nsxv_manager, context, router_id, address_groups=address_groups, is_connected=is_connected) -def delete_interface(nsxv_manager, context, router_id, network_id, - dist=False, is_wait=True): +def delete_interface(nsxv_manager, context, router_id, network_id, dist=False): with locking.LockManager.get_lock(str(router_id)): _delete_interface(nsxv_manager, context, router_id, network_id, - dist=dist, is_wait=is_wait) + dist=dist) def _delete_interface(nsxv_manager, context, router_id, network_id, - dist=False, is_wait=True): + dist=False): # Get the pg/wire id of the network id vcns_network_id = _retrieve_nsx_switch_id(context, network_id) LOG.debug("Network id %(network_id)s corresponding ref is : " @@ -2212,10 +2209,8 @@ def _delete_interface(nsxv_manager, context, router_id, network_id, 'edge_id': edge_id}) return if not dist: - task = nsxv_manager.delete_interface( + nsxv_manager.delete_interface( router_id, edge_id, edge_vnic_binding.vnic_index) - if is_wait: - task.wait(task_const.TaskState.RESULT) nsxv_db.free_edge_vnic_by_network( context.session, edge_id, network_id) else: @@ -2415,9 +2410,6 @@ class NsxVCallbacks(object): def interface_update_result(self, task): LOG.debug("interface_update_result %d", task.status) - def interface_delete_result(self, task): - LOG.debug("interface_delete_result %d", task.status) - def snat_create_result(self, task): LOG.debug("snat_create_result %d", task.status)