feat: 2.4.0

1. 修复阻塞策略为并行时产生大量任务问题
This commit is contained in:
byteblogs168 2023-10-27 09:03:05 +08:00
parent ac671d2ae7
commit 67a34219ae
3 changed files with 11 additions and 0 deletions

View File

@ -53,4 +53,6 @@ public class JobTaskPrepareDTO {
*/ */
private LocalDateTime executionAt; private LocalDateTime executionAt;
private boolean onlyTimeoutCheck;
} }

View File

@ -60,15 +60,21 @@ public class JobTaskPrepareActor extends AbstractActor {
TerminalJobPrepareHandler terminalJobPrepareHandler = SpringContext.getBeanByType(TerminalJobPrepareHandler.class); TerminalJobPrepareHandler terminalJobPrepareHandler = SpringContext.getBeanByType(TerminalJobPrepareHandler.class);
terminalJobPrepareHandler.handler(prepare); terminalJobPrepareHandler.handler(prepare);
} else { } else {
boolean onlyTimeoutCheck = false;
for (JobTaskBatch jobTaskBatch : notCompleteJobTaskBatchList) { for (JobTaskBatch jobTaskBatch : notCompleteJobTaskBatchList) {
prepare.setExecutionAt(jobTaskBatch.getExecutionAt()); prepare.setExecutionAt(jobTaskBatch.getExecutionAt());
prepare.setTaskBatchId(jobTaskBatch.getId()); prepare.setTaskBatchId(jobTaskBatch.getId());
prepare.setOnlyTimeoutCheck(onlyTimeoutCheck);
for (JobPrePareHandler prePareHandler : prePareHandlers) { for (JobPrePareHandler prePareHandler : prePareHandlers) {
if (prePareHandler.matches(jobTaskBatch.getTaskBatchStatus())) { if (prePareHandler.matches(jobTaskBatch.getTaskBatchStatus())) {
prePareHandler.handler(prepare); prePareHandler.handler(prepare);
break; break;
} }
} }
// 当存在大量待处理任务时除了第一个任务需要执行阻塞策略其他任务只做任务检查
onlyTimeoutCheck = true;
} }
} }
} }

View File

@ -55,6 +55,9 @@ public class RunningJobPrepareHandler extends AbstractJobPrePareHandler {
} }
if (prepare.isOnlyTimeoutCheck()) {
return;
}
BlockStrategies.BlockStrategyContext blockStrategyContext = JobTaskConverter.INSTANCE.toBlockStrategyContext(prepare); BlockStrategies.BlockStrategyContext blockStrategyContext = JobTaskConverter.INSTANCE.toBlockStrategyContext(prepare);
blockStrategyContext.setOperationReason(jobOperationReasonEnum); blockStrategyContext.setOperationReason(jobOperationReasonEnum);
BlockStrategy blockStrategyInterface = BlockStrategies.BlockStrategyEnum.getBlockStrategy(blockStrategy); BlockStrategy blockStrategyInterface = BlockStrategies.BlockStrategyEnum.getBlockStrategy(blockStrategy);