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 3d4f65f123 fix(ai): evict transformer clients by rule id (#7121)
3d4f65f123 is described below

commit 3d4f65f12384e8bc48a60d981df83894b5f123bd
Author: Liming Deng <[email protected]>
AuthorDate: Tue Sep 22 09:16:22 2026 +0800

    fix(ai): evict transformer clients by rule id (#7121)
---
 .../request/handler/AiRequestTransformerPluginHandler.java     |  3 +--
 .../request/handler/AiRequestTransformerPluginHandlerTest.java |  4 ++++
 .../response/handler/AiResponseTransformerPluginHandler.java   | 10 +---------
 .../handler/AiResponseTransformerPluginHandlerTest.java        |  3 +++
 4 files changed, 9 insertions(+), 11 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandler.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandler.java
index 3b59020fde..fc50a6f3a6 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandler.java
@@ -76,8 +76,7 @@ public class AiRequestTransformerPluginHandler implements 
PluginDataHandler {
     @Override
     public void removeRule(final RuleData ruleData) {
         Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
-        AiRequestTransformerHandle aiRequestTransformerHandle = 
GsonUtils.getInstance().fromJson(ruleData.getHandle(), 
AiRequestTransformerHandle.class);
-        ChatClientCache.getInstance().destroyClient(ruleData.getId() + 
aiRequestTransformerHandle.getProvider());
+        ChatClientCache.getInstance().destroyClient(ruleData.getId());
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandlerTest.java
index 7888a7b3da..d58c39f014 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/handler/AiRequestTransformerPluginHandlerTest.java
@@ -28,6 +28,7 @@ import org.apache.shenyu.plugin.base.cache.CommonHandleCache;
 import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.springframework.ai.chat.model.ChatModel;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -85,11 +86,14 @@ class AiRequestTransformerPluginHandlerTest {
         AiRequestTransformerHandle handle = new AiRequestTransformerHandle();
         handle.setProvider("TEST_PROVIDER");
         ruleData.setHandle(GsonUtils.getInstance().toJson(handle));
+        chatClientCache.init(ruleData.getId(), mock(ChatModel.class));
+        assertNotNull(chatClientCache.getClient(ruleData.getId()));
 
         pluginHandler.removeRule(ruleData);
 
         CommonHandleCache<String, AiRequestTransformerHandle> cache = 
AiRequestTransformerPluginHandler.CACHED_HANDLE.get();
         assertNull(cache.obtainHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        assertNull(chatClientCache.getClient(ruleData.getId()));
     }
 
     @Test
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandler.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandler.java
index 483c904216..a0acc3bef5 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandler.java
@@ -91,15 +91,7 @@ public class AiResponseTransformerPluginHandler implements 
PluginDataHandler {
     @Override
     public void removeRule(final RuleData ruleData) {
         Optional.ofNullable(ruleData.getHandle()).ifPresent(s -> 
CACHED_HANDLE.get().removeHandle(CacheKeyUtils.INST.getKey(ruleData)));
-        try {
-            AiResponseTransformerHandle aiResponseTransformerHandle = 
GsonUtils.getInstance().fromJson(ruleData.getHandle(), 
AiResponseTransformerHandle.class);
-            if (Objects.nonNull(aiResponseTransformerHandle) && 
Objects.nonNull(aiResponseTransformerHandle.getProvider())) {
-                ChatClientCache.getInstance().destroyClient(ruleData.getId() + 
aiResponseTransformerHandle.getProvider());
-            }
-        } catch (Exception e) {
-            LOG.error("AiResponseTransformerPluginHandler remove rule error", 
e);
-            return;
-        }
+        ChatClientCache.getInstance().destroyClient(ruleData.getId());
     }
 
     @Override
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandlerTest.java
index 02f009ef55..c0114191b7 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/handler/AiResponseTransformerPluginHandlerTest.java
@@ -176,12 +176,15 @@ class AiResponseTransformerPluginHandlerTest {
 
         // First add the rule
         handler.handlerRule(ruleData);
+        ChatClientCache.getInstance().init(ruleData.getId(), chatModel);
+        
assertNotNull(ChatClientCache.getInstance().getClient(ruleData.getId()));
 
         // Then remove the rule
         handler.removeRule(ruleData);
 
         // Verify rule is properly removed
         
assertNull(AiResponseTransformerPluginHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(ruleData)));
+        assertNull(ChatClientCache.getInstance().getClient(ruleData.getId()));
     }
 
     @Test

Reply via email to