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

Reply via email to