You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pe...@apache.org on 2024/01/23 13:46:35 UTC

(cloudstack) 01/01: NSX: Add retry logic with sleep to delete segments

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 <pe...@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 {