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