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,