This is an automated email from the ASF dual-hosted git repository.
Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new e61fb99904 fix: skip discovery upstream import entries without a
handler id (#6695) (#7517)
e61fb99904 is described below
commit e61fb999040a8430be30e4b7d3ceb6300e160077
Author: wy471x <[email protected]>
AuthorDate: Sat Oct 17 20:48:20 2026 +0800
fix: skip discovery upstream import entries without a handler id (#6695)
(#7517)
---
.../service/impl/DiscoveryUpstreamServiceImpl.java | 16 ++++++++++-----
.../service/DiscoveryUpstreamServiceTest.java | 24 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 5 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
index e33a523ce9..82ad6f7f8d 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DiscoveryUpstreamServiceImpl.java
@@ -326,6 +326,12 @@ public class DiscoveryUpstreamServiceImpl implements
DiscoveryUpstreamService {
for (DiscoveryUpstreamDTO discoveryUpstreamDTO :
discoveryUpstreamList) {
String discoveryHandlerId =
discoveryUpstreamDTO.getDiscoveryHandlerId();
String url = discoveryUpstreamDTO.getUrl();
+ if (!StringUtils.hasText(discoveryHandlerId)) {
+ errorMsgBuilder
+ .append(url)
+ .append(',');
+ continue;
+ }
Set<String> existsUpstreamUrlSet = discoveryHandlerUpstreamMap
.getOrDefault(discoveryHandlerId, Lists.newArrayList())
.stream()
@@ -367,17 +373,17 @@ public class DiscoveryUpstreamServiceImpl implements
DiscoveryUpstreamService {
for (DiscoveryUpstreamDTO discoveryUpstreamDTO :
discoveryUpstreamList) {
String discoveryHandlerId =
discoveryUpstreamDTO.getDiscoveryHandlerId();
String url = discoveryUpstreamDTO.getUrl();
- String newDiscoveryHandlerId =
discoveryHandlerIdMapping.getOrDefault(discoveryHandlerId, discoveryHandlerId);
- Set<String> existsUpstreamUrlSet =
discoveryHandlerUpstreamMap.computeIfAbsent(newDiscoveryHandlerId, key -> new
HashSet<>());
- if (existsUpstreamUrlSet.contains(url)) {
+ String targetHandlerId =
discoveryHandlerIdMapping.getOrDefault(discoveryHandlerId, discoveryHandlerId);
+ Set<String> existsUpstreamUrlSet =
discoveryHandlerUpstreamMap.computeIfAbsent(targetHandlerId, key -> new
HashSet<>());
+ if (existsUpstreamUrlSet.contains(url) ||
!StringUtils.hasText(targetHandlerId)) {
errorMsgBuilder
.append(url)
- .append(",");
+ .append(',');
continue;
}
discoveryUpstreamDTO.setNamespaceId(namespace);
discoveryUpstreamDTO.setId(null);
- discoveryUpstreamDTO.setDiscoveryHandlerId(newDiscoveryHandlerId);
+ discoveryUpstreamDTO.setDiscoveryHandlerId(targetHandlerId);
DiscoveryUpstreamDO discoveryUpstreamDO =
DiscoveryUpstreamDO.buildDiscoveryUpstreamDO(discoveryUpstreamDTO);
if (discoveryUpstreamMapper.insert(discoveryUpstreamDO) > 0) {
existsUpstreamUrlSet.add(url);
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
index d8a5176663..7653058478 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/DiscoveryUpstreamServiceTest.java
@@ -287,6 +287,30 @@ public final class DiscoveryUpstreamServiceTest {
Assertions.assertEquals(0, duplicateResult.getSuccessCount());
}
+ @Test
+ public void testImportDataSkipsNullDiscoveryHandlerId() {
+
when(discoveryUpstreamMapper.selectAll()).thenReturn(Collections.emptyList());
+
+ final List<DiscoveryUpstreamDTO> upstreamDTOList =
Collections.singletonList(buildDiscoveryUpstreamDTO("", null, "url-null"));
+ ConfigImportResult result =
this.discoveryUpstreamService.importData(upstreamDTOList);
+ assertNotNull(result);
+ Assertions.assertEquals(0, result.getSuccessCount());
+ verify(discoveryUpstreamMapper, never()).insert(any());
+ }
+
+ @Test
+ public void testImportDataWithNamespaceSkipsNullDiscoveryHandlerId() {
+ String namespace = "ns1";
+ ConfigsImportContext context = new ConfigsImportContext();
+
when(discoveryUpstreamMapper.selectByNamespaceId(namespace)).thenReturn(Collections.emptyList());
+
+ final List<DiscoveryUpstreamDTO> upstreamDTOList =
Collections.singletonList(buildDiscoveryUpstreamDTO("", null, "url-null"));
+ ConfigImportResult result =
this.discoveryUpstreamService.importData(namespace, upstreamDTOList, context);
+ assertNotNull(result);
+ Assertions.assertEquals(0, result.getSuccessCount());
+ verify(discoveryUpstreamMapper, never()).insert(any());
+ }
+
@Test
public void testUpdateBatch() {
when(discoveryUpstreamMapper.insert(any())).thenReturn(1);