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