Skip to content

Commit 6bff177

Browse files
Andrey VolchkovZhyliaievD
authored andcommitted
fix: NsxResource.executeRequest DeleteNsxNatRuleCommand comparison bug
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.
1 parent 93239e0 commit 6bff177

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxNatRuleCommand.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ public String getProtocol() {
5454
return protocol;
5555
}
5656

57+
public String getNetworkServiceName() {
58+
if (service != null) {
59+
return service.getName();
60+
}
61+
return null;
62+
}
63+
5764
@Override
5865
public boolean equals(Object o) {
5966
if (this == o) {

plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,10 @@ private NsxAnswer executeRequest(CreateNsxPortForwardRuleCommand cmd) {
415415

416416
private NsxAnswer executeRequest(DeleteNsxNatRuleCommand cmd) {
417417
String ruleName = null;
418-
if (cmd.getService() == Network.Service.StaticNat) {
418+
if (Network.Service.StaticNat.getName().equals(cmd.getNetworkServiceName())) {
419419
ruleName = NsxControllerUtils.getStaticNatRuleName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(),
420420
cmd.getNetworkResourceId(), cmd.isResourceVpc());
421-
} else if (cmd.getService() == Network.Service.PortForwarding) {
421+
} else if (Network.Service.PortForwarding.getName().equals(cmd.getNetworkServiceName())) {
422422
ruleName = NsxControllerUtils.getPortForwardRuleName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(),
423423
cmd.getNetworkResourceId(), cmd.getRuleId(), cmd.isResourceVpc());
424424
}
@@ -456,7 +456,7 @@ private NsxAnswer executeRequest(DeleteNsxLoadBalancerRuleCommand cmd) {
456456
try {
457457
nsxApiClient.deleteNsxLbResources(tier1GatewayName, cmd.getLbId());
458458
} catch (Exception e) {
459-
logger.error(String.format("Failed to add NSX load balancer rule %s for network: %s", ruleName, cmd.getNetworkResourceName()));
459+
logger.error(String.format("Failed to delete NSX load balancer rule %s for network: %s", ruleName, cmd.getNetworkResourceName()));
460460
return new NsxAnswer(cmd, new CloudRuntimeException(e.getMessage()));
461461
}
462462
return new NsxAnswer(cmd, true, null);

plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package org.apache.cloudstack.resource;
1818

19+
import com.cloud.network.Network;
1920
import com.cloud.network.dao.NetworkVO;
2021
import com.cloud.utils.exception.CloudRuntimeException;
2122
import com.vmware.nsx.model.TransportZone;
@@ -61,6 +62,7 @@
6162
import static org.mockito.ArgumentMatchers.anyString;
6263
import static org.mockito.Mockito.doThrow;
6364
import static org.mockito.Mockito.mock;
65+
import static org.mockito.Mockito.verify;
6466
import static org.mockito.Mockito.when;
6567

6668
@RunWith(MockitoJUnitRunner.class)
@@ -247,8 +249,11 @@ public void testCreatePortForwardRule() {
247249
@Test
248250
public void testDeleteNsxNatRule() {
249251
DeleteNsxNatRuleCommand cmd = new DeleteNsxNatRuleCommand(domainId, accountId, zoneId, 3L, "VPC01", true, 2L, 5L, "22", "tcp");
252+
Network.Service service = new Network.Service("PortForwarding");
253+
cmd.setService(service);
250254
NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(cmd);
251255
assertTrue(answer.getResult());
256+
verify(nsxApi).deleteNatRule(service, "22", "tcp", "VPC01", "D1-A2-Z1-V3", "D1-A2-Z1-V3-PF5");
252257
}
253258

254259
@Test

0 commit comments

Comments
 (0)