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);

Reply via email to