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 a5679e9cbd fix(admin): paginate namespace plugin lists without loading
jars (#7237)
a5679e9cbd is described below
commit a5679e9cbd3f14f073a93c827d0ac45ce7c9b92d
Author: Liming Deng <[email protected]>
AuthorDate: Wed Sep 30 12:18:56 2026 +0800
fix(admin): paginate namespace plugin lists without loading jars (#7237)
---
.../service/impl/NamespacePluginServiceImpl.java | 14 ++++++--
.../mappers/namespace-plugin-rel-sqlmap.xml | 22 ++++---------
.../admin/mapper/NamespacePluginRelMapperTest.java | 37 ++++++++++++++++++++++
3 files changed, 56 insertions(+), 17 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
index c0c65d7c91..f4f6f9c264 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
@@ -17,6 +17,9 @@
package org.apache.shenyu.admin.service.impl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -31,7 +34,7 @@ import org.apache.shenyu.admin.model.entity.PluginDO;
import org.apache.shenyu.admin.model.entity.PluginHandleDO;
import org.apache.shenyu.admin.model.entity.SelectorDO;
import org.apache.shenyu.admin.model.page.CommonPager;
-import org.apache.shenyu.admin.model.page.PageResultUtils;
+import org.apache.shenyu.admin.model.page.PageParameter;
import org.apache.shenyu.admin.model.query.NamespacePluginQuery;
import org.apache.shenyu.admin.model.result.ConfigImportResult;
import org.apache.shenyu.admin.model.vo.NamespacePluginVO;
@@ -137,7 +140,14 @@ public class NamespacePluginServiceImpl implements
NamespacePluginService {
@Override
public CommonPager<NamespacePluginVO> listByPage(final
NamespacePluginQuery namespacePluginQuery) {
- return PageResultUtils.result(namespacePluginQuery.getPageParameter(),
() -> namespacePluginRelMapper.selectByQuery(namespacePluginQuery));
+ PageParameter parameter = namespacePluginQuery.getPageParameter();
+ PageHelper.startPage(parameter.getCurrentPage(),
parameter.getPageSize());
+ try {
+ PageInfo<NamespacePluginVO> page = new
PageInfo<>(namespacePluginRelMapper.selectByQuery(namespacePluginQuery));
+ return new CommonPager<>(new PageParameter(page.getPageNum(),
page.getPageSize(), (int) page.getTotal()), page.getList());
+ } finally {
+ PageHelper.clearPage();
+ }
}
@Override
diff --git
a/shenyu-admin/src/main/resources/mappers/namespace-plugin-rel-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/namespace-plugin-rel-sqlmap.xml
index 062db4b192..868ab315df 100644
--- a/shenyu-admin/src/main/resources/mappers/namespace-plugin-rel-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/namespace-plugin-rel-sqlmap.xml
@@ -84,30 +84,23 @@
npr.date_created AS dateCreated,
npr.date_updated AS dateUpdated,
p.role AS role,
- p.NAME AS NAME,
- p.plugin_jar AS pluginJar
- FROM
- ( SELECT
- <include refid="Base_Column_List"/>
- FROM namespace_plugin_rel
+ p.NAME AS NAME
+ FROM namespace_plugin_rel npr
+ LEFT JOIN plugin p ON p.id = npr.plugin_id
<where>
<if test="enabled != null">
- AND enabled = #{enabled, jdbcType=TINYINT}
+ AND npr.enabled = #{enabled, jdbcType=TINYINT}
</if>
<if test="namespaceId != null">
- AND namespace_id = #{namespaceId, jdbcType=VARCHAR}
+ AND npr.namespace_id = #{namespaceId, jdbcType=VARCHAR}
</if>
- </where>
- ) npr
- LEFT JOIN plugin p ON p.id = npr.plugin_id
- <where>
<if test="name != null and name != ''">
<bind name="nameLike" value="('%' + name + '%')"/>
AND p.name LIKE #{nameLike, jdbcType=VARCHAR}
</if>
</where>
ORDER BY
- sort,
+ npr.sort,
npr.id ASC
</select>
@@ -167,8 +160,7 @@
npr.date_created AS dateCreated,
npr.date_updated AS dateUpdated,
p.role AS role,
- p.NAME AS NAME,
- p.plugin_jar AS pluginJar
+ p.NAME AS NAME
FROM namespace_plugin_rel npr LEFT JOIN plugin p ON npr.plugin_id =
p.id
<where>
<if test="condition.keyword != null and condition.keyword != ''">
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/NamespacePluginRelMapperTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/NamespacePluginRelMapperTest.java
index 52f3e5c4ab..cdfc8a11e0 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/NamespacePluginRelMapperTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/mapper/NamespacePluginRelMapperTest.java
@@ -21,9 +21,13 @@ import jakarta.annotation.Resource;
import org.apache.shenyu.admin.AbstractSpringIntegrationTest;
import org.apache.shenyu.admin.model.entity.NamespacePluginRelDO;
import org.apache.shenyu.admin.model.page.PageParameter;
+import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.query.NamespacePluginQueryCondition;
import org.apache.shenyu.admin.model.query.NamespacePluginQuery;
import org.apache.shenyu.admin.model.entity.PluginDO;
import org.apache.shenyu.admin.model.vo.NamespacePluginVO;
+import org.apache.shenyu.admin.service.NamespacePluginService;
+import org.springframework.transaction.annotation.Transactional;
import org.apache.shenyu.common.utils.UUIDUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -42,6 +46,39 @@ class NamespacePluginRelMapperTest extends
AbstractSpringIntegrationTest {
@Resource
private PluginMapper pluginMapper;
+ @Resource
+ private NamespacePluginService namespacePluginService;
+
+ @Test
+ @Transactional
+ void testPluginListsArePagedWithoutJar() {
+ final byte[] jar = new byte[] {1, 2, 3};
+ String namespace = "lightweight-list";
+ for (int index = 0; index < 2; index++) {
+ String id = "lightweight-plugin-" + index;
+
pluginMapper.insert(PluginDO.builder().id(id).name(id).role("proxy").sort(index).enabled(true).pluginJar(jar)
+ .dateCreated(new Timestamp(0)).dateUpdated(new
Timestamp(0)).build());
+
namespacePluginRelMapper.insertSelective(NamespacePluginRelDO.builder().id(id).pluginId(id).namespaceId(namespace)
+ .enabled(true).sort(index).build());
+ }
+ NamespacePluginQuery query = new
NamespacePluginQuery("lightweight-plugin", 1, new PageParameter(1, 1),
namespace);
+ CommonPager<NamespacePluginVO> first =
namespacePluginService.listByPage(query);
+ query.setPageParameter(new PageParameter(2, 1));
+ CommonPager<NamespacePluginVO> second =
namespacePluginService.listByPage(query);
+ Assertions.assertEquals(2, first.getPage().getTotalCount());
+ Assertions.assertEquals(1, first.getDataList().size());
+ Assertions.assertEquals(1, second.getDataList().size());
+ Assertions.assertNotEquals(first.getDataList().get(0).getId(),
second.getDataList().get(0).getId());
+ Assertions.assertNull(first.getDataList().get(0).getPluginJar());
+ Assertions.assertNull(second.getDataList().get(0).getPluginJar());
+ Assertions.assertArrayEquals(jar,
namespacePluginRelMapper.selectByPluginIdAndNamespaceId("lightweight-plugin-0",
namespace).getPluginJar());
+ NamespacePluginQueryCondition condition = new
NamespacePluginQueryCondition();
+ condition.setKeyword("lightweight-plugin");
+ List<NamespacePluginVO> search =
namespacePluginRelMapper.searchByCondition(condition);
+ Assertions.assertEquals(2, search.size());
+ search.forEach(plugin -> Assertions.assertNull(plugin.getPluginJar()));
+ }
+
@Test
void testSelectByIds() {
String id = UUIDUtils.getInstance().generateShortUuid();