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

dengliming 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 314dfbc307 fix(plugin): remove cached rules without handles (#7132)
314dfbc307 is described below

commit 314dfbc30705be340592f9ab19f3af7ad2f74150
Author: Liming Deng <[email protected]>
AuthorDate: Sat Sep 19 22:15:07 2026 +0800

    fix(plugin): remove cached rules without handles (#7132)
---
 .../context/path/handler/ContextPathPluginDataHandler.java |  2 +-
 .../path/handler/ContextPathPluginDataHandlerTest.java     | 10 +++++++++-
 .../response/handler/ModifyResponsePluginDataHandler.java  |  2 +-
 .../handler/ModifyResponsePluginDataHandlerTest.java       |  2 ++
 .../mapping/handler/ParamMappingPluginDataHandler.java     |  2 +-
 .../param/mapping/handler/ParamMappingPluginDataTest.java  |  5 ++---
 .../plugin/redirect/handler/RedirectPluginDataHandler.java |  2 +-
 .../apache/shenyu/plugin/redirect/RedirectPluginTest.java  | 14 ++++++++++++++
 .../plugin/rewrite/handler/RewritePluginDataHandler.java   |  2 +-
 .../rewrite/handler/RewritePluginDataHandlerTest.java      |  1 +
 10 files changed, 33 insertions(+), 9 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-context-path/src/main/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-context-path/src/main/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandler.java
index 0dfe474144..58b93cc924 100644
--- 
a/shenyu-plugin/shenyu-plugin-context-path/src/main/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-context-path/src/main/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandler.java
@@ -60,7 +60,7 @@ public class ContextPathPluginDataHandler implements 
PluginDataHandler {
 
     @Override
     public void removeRule(final RuleData ruleData) {
-        Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        Optional.ofNullable(ruleData).ifPresent(data -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(data)));
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-context-path/src/test/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-context-path/src/test/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandlerTest.java
index 57c3c9a955..8478e3ffc9 100644
--- 
a/shenyu-plugin/shenyu-plugin-context-path/src/test/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-context-path/src/test/java/org/apache/shenyu/plugin/context/path/handler/ContextPathPluginDataHandlerTest.java
@@ -19,10 +19,12 @@ package org.apache.shenyu.plugin.context.path.handler;
 
 import org.apache.shenyu.common.dto.RuleData;
 import org.apache.shenyu.common.enums.PluginEnum;
+import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * ContextPathPluginDataHandler Test.
@@ -43,7 +45,13 @@ public class ContextPathPluginDataHandlerTest {
 
     @Test
     public void removeRuleTest() {
-        
contextPathPluginDataHandler.removeRule(RuleData.builder().handle("{}").build());
+        RuleData ruleData = 
RuleData.builder().selectorId("selector").id("rule").handle("{}").build();
+        contextPathPluginDataHandler.handlerRule(ruleData);
+        ruleData.setHandle(null);
+
+        contextPathPluginDataHandler.removeRule(ruleData);
+
+        
assertNull(ContextPathPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData)));
     }
 
     @Test
diff --git 
a/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandler.java
index b5f769fb44..10177df6ff 100644
--- 
a/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandler.java
@@ -46,7 +46,7 @@ public class ModifyResponsePluginDataHandler implements 
PluginDataHandler {
 
     @Override
     public void removeRule(final RuleData ruleData) {
-        Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        Optional.ofNullable(ruleData).ifPresent(data -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(data)));
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-modify-response/src/test/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-modify-response/src/test/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandlerTest.java
index 26f5e6b115..1ab505c652 100644
--- 
a/shenyu-plugin/shenyu-plugin-modify-response/src/test/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-modify-response/src/test/java/org/apache/shenyu/plugin/modify/response/handler/ModifyResponsePluginDataHandlerTest.java
@@ -65,6 +65,8 @@ public final class ModifyResponsePluginDataHandlerTest {
      */
     @Test
     public void removeSelectorTest() {
+        modifyResponsePluginDataHandler.handlerRule(ruleData);
+        when(ruleData.getHandle()).thenReturn(null);
         modifyResponsePluginDataHandler.removeRule(ruleData);
         ModifyResponseRuleHandle modifyResponseRuleHandle = 
ModifyResponsePluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData));
         assertNull(modifyResponseRuleHandle);
diff --git 
a/shenyu-plugin/shenyu-plugin-param-mapping/src/main/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-param-mapping/src/main/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataHandler.java
index 10e2b50ffc..666b1671f7 100644
--- 
a/shenyu-plugin/shenyu-plugin-param-mapping/src/main/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-param-mapping/src/main/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataHandler.java
@@ -46,7 +46,7 @@ public class ParamMappingPluginDataHandler implements 
PluginDataHandler {
 
     @Override
     public void removeRule(final RuleData ruleData) {
-        Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        Optional.ofNullable(ruleData).ifPresent(data -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(data)));
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-param-mapping/src/test/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataTest.java
 
b/shenyu-plugin/shenyu-plugin-param-mapping/src/test/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataTest.java
index 4922a398a8..fb93c29a6e 100644
--- 
a/shenyu-plugin/shenyu-plugin-param-mapping/src/test/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-param-mapping/src/test/java/org/apache/shenyu/plugin/param/mapping/handler/ParamMappingPluginDataTest.java
@@ -58,10 +58,9 @@ public class ParamMappingPluginDataTest {
         RuleData ruleData = new RuleData();
         ruleData.setSelectorId("test");
         ruleData.setName("test-param-mappin-plugin");
-        this.paramMappingPluginDataHandler.removeRule(this.ruleData);
-        
Assertions.assertNull(ParamMappingPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(this.ruleData)));
+        ruleData.setId(this.ruleData.getId());
         this.paramMappingPluginDataHandler.removeRule(ruleData);
-        
Assertions.assertNull(ParamMappingPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        
Assertions.assertNull(ParamMappingPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(this.ruleData)));
     }
 
     @Test
diff --git 
a/shenyu-plugin/shenyu-plugin-redirect/src/main/java/org/apache/shenyu/plugin/redirect/handler/RedirectPluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-redirect/src/main/java/org/apache/shenyu/plugin/redirect/handler/RedirectPluginDataHandler.java
index c02c403ddd..f6fcdbf746 100644
--- 
a/shenyu-plugin/shenyu-plugin-redirect/src/main/java/org/apache/shenyu/plugin/redirect/handler/RedirectPluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-redirect/src/main/java/org/apache/shenyu/plugin/redirect/handler/RedirectPluginDataHandler.java
@@ -46,7 +46,7 @@ public class RedirectPluginDataHandler implements 
PluginDataHandler {
 
     @Override
     public void removeRule(final RuleData ruleData) {
-        Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        Optional.ofNullable(ruleData).ifPresent(data -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(data)));
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-redirect/src/test/java/org/apache/shenyu/plugin/redirect/RedirectPluginTest.java
 
b/shenyu-plugin/shenyu-plugin-redirect/src/test/java/org/apache/shenyu/plugin/redirect/RedirectPluginTest.java
index 6d92b4cd96..d0b8f6b4fe 100644
--- 
a/shenyu-plugin/shenyu-plugin-redirect/src/test/java/org/apache/shenyu/plugin/redirect/RedirectPluginTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-redirect/src/test/java/org/apache/shenyu/plugin/redirect/RedirectPluginTest.java
@@ -38,6 +38,7 @@ import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
 
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -94,4 +95,17 @@ public final class RedirectPluginTest {
         assertThat(PluginEnum.REDIRECT.getName(), Matchers.is(result));
     }
 
+    @Test
+    public void testRemoveRuleWithoutHandle() {
+        RuleData ruleData = 
RuleData.builder().selectorId("selector").id("rule")
+                .handle("{\"redirectURI\":\"/test\"}").build();
+        RedirectPluginDataHandler handler = new RedirectPluginDataHandler();
+        handler.handlerRule(ruleData);
+        ruleData.setHandle(null);
+
+        handler.removeRule(ruleData);
+
+        
assertNull(RedirectPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData)));
+    }
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-rewrite/src/main/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-rewrite/src/main/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandler.java
index 9fbbfadaf9..60ff792dcf 100644
--- 
a/shenyu-plugin/shenyu-plugin-rewrite/src/main/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-rewrite/src/main/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandler.java
@@ -46,7 +46,7 @@ public class RewritePluginDataHandler implements 
PluginDataHandler {
 
     @Override
     public void removeRule(final RuleData ruleData) {
-        Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        Optional.ofNullable(ruleData).ifPresent(data -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(data)));
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-rewrite/src/test/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-rewrite/src/test/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandlerTest.java
index 8394c326a8..0b3a9b6860 100644
--- 
a/shenyu-plugin/shenyu-plugin-rewrite/src/test/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-rewrite/src/test/java/org/apache/shenyu/plugin/rewrite/handler/RewritePluginDataHandlerTest.java
@@ -52,6 +52,7 @@ public final class RewritePluginDataHandlerTest {
         Supplier<CommonHandleCache<String, RewriteHandle>> cache = 
RewritePluginDataHandler.CACHED_HANDLE;
         cache.get().cachedHandle("1_test", new RewriteHandle());
         Assertions.assertNotNull(cache.get().obtainHandle("1_test"));
+        ruleData.setHandle(null);
         rewritePluginDataHandler.removeRule(ruleData);
         Assertions.assertNull(cache.get().obtainHandle("1_test"));
     }

Reply via email to