From 08bda844717505d9e43a0d3f3855812335af1b5d Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Thu, 5 Feb 2026 16:49:58 +0800 Subject: [PATCH] refactor(ActionCore): Specifies the minimum platform thread pool size Context: The ActionExecutor needs at least 2 platform thread to support async action execution, otherwise the current ActionExecutor logic cannot be executed --- .../work/slhaf/partner/core/action/ActionCore.java | 3 ++- .../dispatcher/executor/ActionExecutorTest.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/ActionCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/ActionCore.java index 33abe702..fa58a5a2 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/action/ActionCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/ActionCore.java @@ -49,8 +49,9 @@ public class ActionCore extends PartnerCore { private final Lock cacheLock = new ReentrantLock(); + // 由于当前的执行器逻辑实现,平台线程池大小不得小于 2,这里规定为最小为 4 private final ExecutorService platformExecutor = Executors - .newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + .newFixedThreadPool(Math.max(Runtime.getRuntime().availableProcessors(), 4)); private final ExecutorService virtualExecutor = Executors.newVirtualThreadPerTaskExecutor(); /** diff --git a/Partner-Main/src/test/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutorTest.java b/Partner-Main/src/test/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutorTest.java index 55d51348..9d8e90a1 100644 --- a/Partner-Main/src/test/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutorTest.java +++ b/Partner-Main/src/test/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutorTest.java @@ -1,5 +1,6 @@ package work.slhaf.partner.module.modules.action.dispatcher.executor; +import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -44,6 +45,7 @@ import static org.mockito.Mockito.*; * 18) 同 stage 多 metaAction 并发完成顺序不固定(未覆盖:更适合集成/压测) */ @SuppressWarnings("unused") +@Slf4j @ExtendWith(MockitoExtension.class) class ActionExecutorTest { @@ -130,8 +132,9 @@ class ActionExecutorTest { // 场景4:B1 -> B3 -> B4(两轮) -> B7(成功) -> B10。目的:验证多阶段顺序执行。 @Test void execute_multiStage_success() { - ExecutorService directExecutor = new DirectExecutorService(); - stubExecutors(directExecutor, directExecutor); + ExecutorService platformExecutor = Executors.newFixedThreadPool(4); + ExecutorService virtualExecutor = Executors.newVirtualThreadPerTaskExecutor(); + stubExecutors(platformExecutor, virtualExecutor); Map> chain = new HashMap<>(); chain.put(0, List.of(buildMetaAction("a1", false))); @@ -145,14 +148,15 @@ class ActionExecutorTest { doAnswer(inv -> { MetaAction metaAction = inv.getArgument(0); metaAction.getResult().setStatus(MetaAction.ResultStatus.SUCCESS); + log.info("metaAction result:{}", metaAction.getResult().getStatus()); return null; }).when(runnerClient).submit(any(MetaAction.class)); actionExecutor.init(); actionExecutor.execute(input); - verify(runnerClient, times(2)).submit(any(MetaAction.class)); - verify(actionCorrector, times(2)).execute(any()); + verify(runnerClient, timeout(5000).times(2)).submit(any(MetaAction.class)); + verify(actionCorrector, timeout(5000).times(2)).execute(any()); assertEquals(2, actionData.getHistory().size()); assertEquals(ActionData.ActionStatus.SUCCESS, actionData.getStatus()); }