This is an automated email from the ASF dual-hosted git repository.

sureshanaparti pushed a commit to branch 4.22
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.22 by this push:
     new 4df32ae79fb fix: NsxResource.executeRequest DeleteNsxNatRuleCommand 
comparison bug (#12833)
4df32ae79fb is described below

commit 4df32ae79fb21e9f11df5c1235bc504a8e284ae7
Author: Daniil Zhyliaiev <[email protected]>
AuthorDate: Mon Apr 6 21:50:17 2026 +0300

    fix: NsxResource.executeRequest DeleteNsxNatRuleCommand comparison bug 
(#12833)
    
    Fixes an issue in NsxResource.executeRequest where Network.Service
    comparison failed when DeleteNsxNatRuleCommand was executed in a
    different process. Due to serialization/deserialization, the
    deserialized Network.Service instance was not equal to the static
    instances Network.Service.StaticNat and Network.Service.PortForwarding,
    causing the comparison to always return false.
    
    Co-authored-by: Andrey Volchkov <[email protected]>
    (cherry picked from commit 30dd234b000845706c7f79f44ed498fd4eab01f2)
---
 .../org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java   | 7 +++++++
 .../src/main/java/org/apache/cloudstack/resource/NsxResource.java  | 6 +++---
 .../test/java/org/apache/cloudstack/resource/NsxResourceTest.java  | 6 ++++++
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git 
a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java
 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java
index c5231b19ac4..b642df85618 100644
--- 
a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java
+++ 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java
@@ -54,6 +54,13 @@ public class DeleteNsxNatRuleCommand extends 
NsxNetworkCommand {
         return protocol;
     }
 
+    public String getNetworkServiceName() {
+        if (service != null) {
+            return service.getName();
+        }
+        return null;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
diff --git 
a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java
 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java
index 76815b0deeb..78a9363a5e4 100644
--- 
a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java
+++ 
b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java
@@ -415,10 +415,10 @@ public class NsxResource implements ServerResource {
 
     private NsxAnswer executeRequest(DeleteNsxNatRuleCommand cmd) {
         String ruleName = null;
-        if (cmd.getService() == Network.Service.StaticNat) {
+        if 
(Network.Service.StaticNat.getName().equals(cmd.getNetworkServiceName())) {
             ruleName = 
NsxControllerUtils.getStaticNatRuleName(cmd.getDomainId(), cmd.getAccountId(), 
cmd.getZoneId(),
                     cmd.getNetworkResourceId(), cmd.isResourceVpc());
-        } else if (cmd.getService() == Network.Service.PortForwarding) {
+        } else if 
(Network.Service.PortForwarding.getName().equals(cmd.getNetworkServiceName())) {
             ruleName = 
NsxControllerUtils.getPortForwardRuleName(cmd.getDomainId(), 
cmd.getAccountId(), cmd.getZoneId(),
                     cmd.getNetworkResourceId(), cmd.getRuleId(), 
cmd.isResourceVpc());
         }
@@ -456,7 +456,7 @@ public class NsxResource implements ServerResource {
         try {
             nsxApiClient.deleteNsxLbResources(tier1GatewayName, cmd.getLbId());
         } catch (Exception e) {
-            logger.error(String.format("Failed to add NSX load balancer rule 
%s for network: %s", ruleName, cmd.getNetworkResourceName()));
+            logger.error(String.format("Failed to delete NSX load balancer 
rule %s for network: %s", ruleName, cmd.getNetworkResourceName()));
             return new NsxAnswer(cmd, new 
CloudRuntimeException(e.getMessage()));
         }
         return new NsxAnswer(cmd, true, null);
diff --git 
a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java
 
b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java
index ee4f4fb64c2..0d74bb8a3b3 100644
--- 
a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java
+++ 
b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java
@@ -16,6 +16,7 @@
 // under the License.
 package org.apache.cloudstack.resource;
 
+import com.cloud.network.Network;
 import com.cloud.network.dao.NetworkVO;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.vmware.nsx.model.TransportZone;
@@ -61,6 +62,7 @@ import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -247,8 +249,12 @@ public class NsxResourceTest {
     @Test
     public void testDeleteNsxNatRule() {
         DeleteNsxNatRuleCommand cmd = new DeleteNsxNatRuleCommand(domainId, 
accountId, zoneId, 3L, "VPC01", true, 2L, 5L, "22", "tcp");
+        Network.Service service = mock(Network.Service.class);
+        when(service.getName()).thenReturn("PortForwarding");
+        cmd.setService(service);
         NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(cmd);
         assertTrue(answer.getResult());
+        verify(nsxApi).deleteNatRule(service, "22", "tcp", "VPC01", 
"D1-A2-Z1-V3", "D1-A2-Z1-V3-PF5");
     }
 
     @Test

Reply via email to