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 ed1b46acec fix: replace HashMap to ConcurrentMap in 
plugin-ai-request/response (#7067)
ed1b46acec is described below

commit ed1b46acecdb2d6ffebe5430dfcc767dae97d2cd
Author: hengyuss <[email protected]>
AuthorDate: Fri Sep 18 13:21:31 2026 +0800

    fix: replace HashMap to ConcurrentMap in plugin-ai-request/response (#7067)
    
    * fix: replace HashMap to ConcurrentMap in plugin-ai-request/response
    
    * fix: fix tests
    
    ---------
    
    Co-authored-by: Liming Deng <[email protected]>
---
 .../plugin/ai/transformer/request/cache/ChatClientCache.java      | 4 ++--
 .../ai/transformer/request/AiRequestTransformerPluginTest.java    | 8 ++++++--
 .../plugin/ai/transformer/response/cache/ChatClientCache.java     | 4 ++--
 .../ai/transformer/response/AiResponseTransformerPluginTest.java  | 6 ++++--
 4 files changed, 14 insertions(+), 8 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/cache/ChatClientCache.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/cache/ChatClientCache.java
index 52d76370cb..f9dfdba1f5 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/cache/ChatClientCache.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/request/cache/ChatClientCache.java
@@ -20,15 +20,15 @@ package 
org.apache.shenyu.plugin.ai.transformer.request.cache;
 import org.springframework.ai.chat.client.ChatClient;
 import org.springframework.ai.chat.model.ChatModel;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * this is chatClient cache.
  */
 public class ChatClientCache {
 
-    private static final Map<String, ChatClient> CHAT_CLIENT_MAP = new 
HashMap<>();
+    private static final Map<String, ChatClient> CHAT_CLIENT_MAP = new 
ConcurrentHashMap<>();
 
     /**
      * Init.
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPluginTest.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPluginTest.java
index 066121b2b4..8c2366e96f 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPluginTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-request-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/request/AiRequestTransformerPluginTest.java
@@ -68,11 +68,13 @@ class AiRequestTransformerPluginTest {
     void testDoExecuteWithMissingConfigurations() {
 
         MockServerWebExchange exchange = 
MockServerWebExchange.from(MockServerHttpRequest.post("/test").build());
-        SelectorData selector = new SelectorData();
         RuleData rule = new RuleData();
+        rule.setId("test-request-rule-id");
+        rule.setSelectorId("test-selector-id");
 
         when(chain.execute(exchange)).thenReturn(Mono.empty());
 
+        SelectorData selector = new SelectorData();
         StepVerifier.create(plugin.doExecute(exchange, chain, selector, rule))
                 .verifyComplete();
 
@@ -106,8 +108,10 @@ class AiRequestTransformerPluginTest {
         when(chatClientCache.getClient("default")).thenReturn(mockClient);
         when(chain.execute(exchange)).thenReturn(Mono.empty());
 
-        SelectorData selector = new SelectorData();
         RuleData rule = new RuleData();
+        rule.setId("test-request-rule-id");
+        rule.setSelectorId("test-selector-id");
+        SelectorData selector = new SelectorData();
         StepVerifier.create(plugin.doExecute(exchange, chain, selector, rule))
                 .verifyComplete();
 
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/cache/ChatClientCache.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/cache/ChatClientCache.java
index f077b7d821..0b5a42efd0 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/cache/ChatClientCache.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/main/java/org/apache/shenyu/plugin/ai/transformer/response/cache/ChatClientCache.java
@@ -20,15 +20,15 @@ package 
org.apache.shenyu.plugin.ai.transformer.response.cache;
 import org.springframework.ai.chat.client.ChatClient;
 import org.springframework.ai.chat.model.ChatModel;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * this is chatClient cache for ai response transformer.
  */
 public class ChatClientCache {
 
-    private static final Map<String, ChatClient> CHAT_CLIENT_MAP = new 
HashMap<>();
+    private static final Map<String, ChatClient> CHAT_CLIENT_MAP = new 
ConcurrentHashMap<>();
 
     /**
      * Init.
diff --git 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPluginTest.java
 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPluginTest.java
index aa9d4d50fb..2a7f835c6a 100644
--- 
a/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPluginTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-ai/shenyu-plugin-ai-response-transformer/src/test/java/org/apache/shenyu/plugin/ai/transformer/response/AiResponseTransformerPluginTest.java
@@ -122,8 +122,9 @@ class AiResponseTransformerPluginTest {
 
     @Test
     void testDoExecute() {
-        SelectorData selectorData = mock(SelectorData.class);
-        RuleData ruleData = mock(RuleData.class);
+        RuleData ruleData = new RuleData();
+        ruleData.setId("test-response-rule-id");
+        ruleData.setSelectorId("test-selector-id");
         
         // Mock the factory registry and factory
         
lenient().when(aiModelFactoryRegistry.getFactory(AiModelProviderEnum.getByName("test-provider")))
@@ -141,6 +142,7 @@ class AiResponseTransformerPluginTest {
         when(chain.execute(exchange)).thenReturn(Mono.empty());
 
         // Execute plugin - this should succeed with proper configuration
+        SelectorData selectorData = mock(SelectorData.class);
         Mono<Void> result = plugin.doExecute(exchange, chain, selectorData, 
ruleData);
         
         // Verify execution result

Reply via email to