This is an automated email from the ASF dual-hosted git repository. pearl11594 pushed a commit to branch nsx-add-sleep-for-deletion-nw in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 6f86193f336de75f5c4a400ecb9aa5e645a5702d Author: Pearl Dsilva <pearl1...@gmail.com> AuthorDate: Tue Jan 23 08:46:13 2024 -0500 NSX: Add retry logic with sleep to delete segments --- .../apache/cloudstack/service/NsxApiClient.java | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java index d4ac0e7a7e2..1e2c17c4472 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java @@ -453,8 +453,9 @@ public class NsxApiClient { String siteId = getDefaultSiteId(); String enforcementPointPath = getDefaultEnforcementPointPath(siteId); SegmentPorts segmentPortsService = (SegmentPorts) nsxService.apply(SegmentPorts.class); - PolicyGroupMembersListResult segmentPortsList = segmentPortsService.list(DEFAULT_DOMAIN, segmentName, null, enforcementPointPath, - false, null, 50L, false, null); + PolicyGroupMembersListResult segmentPortsList = getSegmentPortList(segmentPortsService, segmentName, enforcementPointPath); + Long portCount = segmentPortsList.getResultCount(); + portCount = retrySegmentDeletion(segmentPortsService, portCount, segmentName, enforcementPointPath); if (segmentPortsList.getResultCount() == 0L) { LOGGER.debug(String.format("Removing the segment with ID %s", segmentName)); removeGroupForSegment(segmentName); @@ -466,6 +467,25 @@ public class NsxApiClient { } } + private PolicyGroupMembersListResult getSegmentPortList(SegmentPorts segmentPortsService, String segmentName, String enforcementPointPath) { + return segmentPortsService.list(DEFAULT_DOMAIN, segmentName, null, enforcementPointPath, + false, null, 50L, false, null); + } + + private Long retrySegmentDeletion(SegmentPorts segmentPortsService, Long portCount, String segmentName, String enforcementPointPath) { + int retries = 5; + do { + try { + Thread.sleep(5000); + portCount = getSegmentPortList(segmentPortsService, segmentName, enforcementPointPath).getResultCount(); + retries--; + } catch (InterruptedException e) { + throw new CloudRuntimeException(String.format("Unable to delete segment %s due to: %s", segmentName, e.getLocalizedMessage())); + } + } while (retries > 0 && portCount > 0); + return portCount; + } + public void createStaticNatRule(String vpcName, String tier1GatewayName, String ruleName, String publicIp, String vmIp) { try {