apache / apache/shenyu

[BUG] DataPermission pagination: count uses exact-name match while list uses LIKE → wrong totals

Open Beginner friendly
#6,691 1 comment 0 reactions 0 assignees View on GitHub
admin priority: medium type: bug
Dominant language
Java
Stars
8.8k
Forks
3.1k
Avg merge
7d 1h
Merged PRs (30d)
85

Description

- severity: Medium
- files: `shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DataPermissionServiceImpl.java:168,200`; `shenyu-admin/src/main/resources/mappers/selector-sqlmap.xml:166-185` (count: `selector_name = #{name}`) vs `:107-135` (list: `selector_name LIKE`); `shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml:113-131` (count: `rule_name = #{name}`) vs `:74-94` (list: `rule_name LIKE`)
- description: `listSelectorsByPage`/`listRulesByPage` call `countByQuery` for the total and `selectByQuery` for the page rows. The count statements filter `name` with exact `=`, while the list statements filter the same `name` with leading-wildcard `LIKE '%name%'`. The count and row set describe different result sets, so `CommonPager` reports an inconsistent total.
- impact: Broken pagination metadata on the data-permission assignment screens whenever a name keyword is entered.
- suggested_fix: Make `countByQuery` use the same `LIKE` predicate as `selectByQuery`.
- confidence: High
- related_existing: none. PERF-40 covers the correlated-exists + leading-wildcard LIKE performance aspect of `selectByCondition`, not this count/list predicate divergence.

---
_Identified during the 2026-08-02 deep re-scan; full list in [`docs/scan2-2026-08-02/06-medium-tiers.md`](docs/scan2-2026-08-02/06-medium-tiers.md)._

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with listSelectorsByPage and listRulesByPage in shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/DataPermissionServiceImpl.java, then compare the count and list statements in selector-sqlmap.xml and rule-sqlmap.xml at the referenced lines. Confirm that filtered totals and rows use the same name predicate. Done means countByQuery and selectByQuery describe the same keyword-matched result set, restoring correct CommonPager totals.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, databases
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
76/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.