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