mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
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
This commit is contained in:
@@ -49,8 +49,9 @@ public class ActionCore extends PartnerCore<ActionCore> {
|
||||
|
||||
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();
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<Integer, List<MetaAction>> 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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user