From c5011ac6e831bc580859e5d3d6ad83f30039504d Mon Sep 17 00:00:00 2001 From: "shixin.ruan" Date: Mon, 27 Apr 2026 19:55:13 +0800 Subject: [PATCH] [portforwarding]: skip detach when serviceUuids is empty PortForwardingConfigProxy.detachNetworkServiceFromNoHaVirtualRouter would generate 'AND vo.uuid IN ()' when called with an empty list, causing a MariaDB syntax error. Add an early return guard. Resolves: ZSTAC-84748 Change-Id: I15a86ffb92829af6952697a4f3cb1351cd5ed28c --- .../portforwarding/PortForwardingConfigProxy.java | 3 +++ .../java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java index feff1ea1f01..2a1b8dd4920 100644 --- a/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java +++ b/plugin/virtualRouterProvider/src/main/java/org/zstack/network/service/virtualrouter/portforwarding/PortForwardingConfigProxy.java @@ -35,6 +35,9 @@ protected void attachNetworkServiceToNoHaVirtualRouter(String vrUuid, String typ @Override protected void detachNetworkServiceFromNoHaVirtualRouter(String vrUuid, String type, List serviceUuids) { + if (serviceUuids == null || serviceUuids.isEmpty()) { + return; + } SQL.New(VirtualRouterPortForwardingRuleRefVO.class).eq(VirtualRouterPortForwardingRuleRefVO_.virtualRouterVmUuid, vrUuid) .in(VirtualRouterPortForwardingRuleRefVO_.uuid, serviceUuids).delete(); } diff --git a/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy b/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy index 1279c3a47df..db49c2ab57c 100755 --- a/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy +++ b/testlib/src/main/java/org/zstack/testlib/VirtualRouterOfferingSpec.groovy @@ -141,6 +141,10 @@ class VirtualRouterOfferingSpec extends InstanceOfferingSpec { return new VirtualRouterCommands.SetSNATRsp() } + simulator(VirtualRouterConstant.VR_REMOVE_SNAT_PATH) { + return new VirtualRouterCommands.RemoveSNATRsp() + } + simulator(VirtualRouterCentralizedDnsBackend.SET_DNS_FORWARD_PATH) { return new VirtualRouterCommands.SetForwardDnsRsp() }