From ebe30aa33bded7deb6a1ef342e1696afbbf95183 Mon Sep 17 00:00:00 2001 From: Kobi Samoray Date: Sun, 21 Feb 2021 15:43:18 +0200 Subject: [PATCH] NSXV - complete member deletion when pool is gone When a pool doesn't exist on the backend, deletion of a member should complete successfully. Change-Id: I781c9f1e273f1ce510c6ce47fd567f7f6c7540db --- .../lbaas/nsx_v/implementation/member_mgr.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/vmware_nsx/services/lbaas/nsx_v/implementation/member_mgr.py b/vmware_nsx/services/lbaas/nsx_v/implementation/member_mgr.py index f762b24f1d..0a4daf8f57 100644 --- a/vmware_nsx/services/lbaas/nsx_v/implementation/member_mgr.py +++ b/vmware_nsx/services/lbaas/nsx_v/implementation/member_mgr.py @@ -178,6 +178,14 @@ class EdgeMemberManagerFromDict(base_mgr.EdgeLoadbalancerBaseManager): return pool_binding = nsxv_db.get_nsxv_lbaas_pool_binding( context.session, lb_id, member['pool_id']) + + if not pool_binding: + # Don't fail deletion if the resource is already gone + LOG.warning("Couldn't find pool %s binding during member deletion", + member['pool_id']) + completor(success=True) + return + edge_id = lb_binding['edge_id'] old_lb = lb_common.is_lb_on_router_edge( @@ -206,7 +214,14 @@ class EdgeMemberManagerFromDict(base_mgr.EdgeLoadbalancerBaseManager): return edge_pool_id = pool_binding['edge_pool_id'] - edge_pool = self.vcns.get_pool(edge_id, edge_pool_id)[1] + try: + edge_pool = self.vcns.get_pool(edge_id, edge_pool_id)[1] + except nsxv_exc.RequestBad: + # Pool doesn't exist, so member is obviously gone + LOG.warning('Edge pool %s does not exist on edge %s', + edge_pool_id, edge_id) + completor(success=True) + return for i, m in enumerate(edge_pool['member']): if m['name'] == lb_common.get_member_id(member['id']):