This is an automated email from the ASF dual-hosted git repository.

liuhongyu 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 0a927fdd16 Fix: RuleServiceImpl#searchByPage() Selectors now populated 
from namespace only when condition selectors are null or empty. (#6305)
0a927fdd16 is described below

commit 0a927fdd1663291185363dc37defbd231392037d
Author: X.Bruce121 <[email protected]>
AuthorDate: Sun Mar 29 21:41:34 2026 +0800

    Fix: RuleServiceImpl#searchByPage() Selectors now populated from namespace 
only when condition selectors are null or empty. (#6305)
    
    * fix admin : only populate selectors from namespace when condition 
selectors are null or empty.
    
    * Update 
shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
    
    Co-authored-by: Copilot <[email protected]>
    
    ---------
    
    Co-authored-by: aias00 <[email protected]>
    Co-authored-by: Copilot <[email protected]>
---
 .../shenyu/admin/service/impl/RuleServiceImpl.java | 19 ++++------
 .../shenyu/admin/service/RuleServiceTest.java      | 44 +++++++++++++++++++++-
 2 files changed, 49 insertions(+), 14 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
index dabcc4fe10..04eca5ccda 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
@@ -67,7 +67,6 @@ import 
org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -119,19 +118,15 @@ public class RuleServiceImpl implements RuleService {
         RuleQueryCondition condition = pageCondition.getCondition();
         doConditionPreProcessing(condition);
         condition.init();
-        List<String> namespaceSelectors = 
Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
-                .map(list -> 
list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
-                .orElse(Collections.emptyList());
 
-        List<String> finalSelectors = 
Optional.ofNullable(condition.getSelectors())
-                .orElseGet(Collections::emptyList);
-
-        if (!namespaceSelectors.isEmpty()) {
-            Set<String> selectorSet = new LinkedHashSet<>(finalSelectors);
-            selectorSet.addAll(namespaceSelectors);
-            finalSelectors = new ArrayList<>(selectorSet);
+        if (CollectionUtils.isEmpty(condition.getSelectors())) {
+            // Populate selectors from the namespace only when condition 
selectors are null or empty.
+            List<String> namespaceSelectors = 
Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
+                    .map(list -> 
list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
+                    .orElse(Collections.emptyList());
+            condition.setSelectors(namespaceSelectors);
         }
-        condition.setSelectors(finalSelectors);
+
         PageHelper.startPage(pageCondition.getPageNum(), 
pageCondition.getPageSize());
         final Page<RuleDO> doList = 
CastUtils.cast(ruleMapper.selectByCondition(condition));
         PageInfo<RuleVO> doPageInfo = doList.toPageInfo(RuleVO::buildRuleVO);
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
index 6810d962e1..2725ec84e5 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
@@ -278,8 +278,8 @@ public final class RuleServiceTest {
         testSelectorMergeScenario(
                 new ArrayList<>(Arrays.asList("s1", "s3")),
                 Arrays.asList(selectorDO1, selectorDO2),
-                3,
-                Arrays.asList("s1", "s2", "s3")
+                2,
+                Arrays.asList("s1", "s3")
         );
 
         testSelectorMergeScenario(
@@ -295,6 +295,46 @@ public final class RuleServiceTest {
                 2,
                 Arrays.asList("s1", "s2")
         );
+
+        testSearchByPageWithSpecifiedSelectors();
+        testSearchByPageExpandsNamespaceSelectorsWhenSelectorsEmpty();
+    }
+
+    private void testSearchByPageWithSpecifiedSelectors() {
+        Page<RuleDO> emptyPage = new Page<>();
+        PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
+        RuleQueryCondition condition = pageCondition.getCondition();
+        List<String> userSelectors = new ArrayList<>(Arrays.asList("s1", 
"s3"));
+        SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
+        SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
+        condition.setSelectors(userSelectors);
+
+        
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(Arrays.asList(selectorDO1,
 selectorDO2));
+        
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
+
+        PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
+
+        assertNotNull(result);
+        assertEquals(2, condition.getSelectors().size());
+        assertTrue(condition.getSelectors().containsAll(Arrays.asList("s1", 
"s3")));
+    }
+
+    private void testSearchByPageExpandsNamespaceSelectorsWhenSelectorsEmpty() 
{
+        Page<RuleDO> emptyPage = new Page<>();
+        PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
+        RuleQueryCondition condition = pageCondition.getCondition();
+        SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
+        SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
+        condition.setSelectors(Collections.emptyList());
+
+        
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(Arrays.asList(selectorDO1,
 selectorDO2));
+        
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
+
+        PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
+
+        assertNotNull(result);
+        assertEquals(2, condition.getSelectors().size());
+        assertTrue(condition.getSelectors().containsAll(Arrays.asList("s1", 
"s2")));
     }
 
     private void testSelectorMergeScenario(final List<String> userSelectors,

Reply via email to