feat: 2.6.0
1. 优化回调日志
This commit is contained in:
parent
c8a238b91c
commit
fe9048ce8a
@ -57,7 +57,7 @@ public abstract class AbstractWorkflowExecutor implements WorkflowExecutor, Init
|
||||
@Autowired
|
||||
private JobTaskBatchGenerator jobTaskBatchGenerator;
|
||||
@Autowired
|
||||
private WorkflowBatchHandler workflowBatchHandler;
|
||||
protected WorkflowBatchHandler workflowBatchHandler;
|
||||
@Autowired
|
||||
private JobTaskMapper jobTaskMapper;
|
||||
@Autowired
|
||||
@ -107,12 +107,7 @@ public abstract class AbstractWorkflowExecutor implements WorkflowExecutor, Init
|
||||
generatorContext.setJobId(context.getJobId());
|
||||
generatorContext.setTaskExecutorScene(context.getTaskExecutorScene());
|
||||
jobTaskBatchGenerator.generateJobTaskBatch(generatorContext);
|
||||
try {
|
||||
workflowBatchHandler.complete(context.getWorkflowTaskBatchId());
|
||||
} catch (IOException e) {
|
||||
throw new EasyRetryServerException("工作流完成处理异常", e);
|
||||
}
|
||||
|
||||
workflowBatchHandler.complete(context.getWorkflowTaskBatchId());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -14,8 +14,10 @@ import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.client.RequestInterceptor;
|
||||
import com.aizuda.easy.retry.server.common.dto.CallbackConfig;
|
||||
import com.aizuda.easy.retry.server.common.enums.ContentTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
|
||||
import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter;
|
||||
import com.aizuda.easy.retry.server.model.dto.CallbackParamsDTO;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
@ -32,6 +34,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -108,7 +111,6 @@ public class CallbackWorkflowExecutor extends AbstractWorkflowExecutor {
|
||||
context.setJobTaskStatus(jobTaskStatus);
|
||||
context.setEvaluationResult(result);
|
||||
context.setLogMessage(message);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -129,6 +131,14 @@ public class CallbackWorkflowExecutor extends AbstractWorkflowExecutor {
|
||||
logMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
logMetaDTO.setJobId(SystemConstants.CALLBACK_JOB_ID);
|
||||
logMetaDTO.setTaskId(jobTask.getId());
|
||||
EasyRetryLog.REMOTE.info("workflowNodeId:[{}] 回调成功. <|>{}<|>", context.getWorkflowNodeId(), logMetaDTO);
|
||||
if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus()) {
|
||||
EasyRetryLog.REMOTE.info("workflowNodeId:[{}] 回调成功. <|>{}<|>", context.getWorkflowNodeId(), logMetaDTO);
|
||||
} else {
|
||||
EasyRetryLog.REMOTE.info("workflowNodeId:[{}] 回调失败. 失败原因:[{}] <|>{}<|>", context.getWorkflowNodeId(),
|
||||
context.getLogMessage(), logMetaDTO);
|
||||
|
||||
// 尝试完成任务
|
||||
workflowBatchHandler.complete(context.getWorkflowTaskBatchId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -52,15 +52,14 @@ import static com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum.NOT
|
||||
public class WorkflowBatchHandler {
|
||||
|
||||
private final WorkflowTaskBatchMapper workflowTaskBatchMapper;
|
||||
private final WorkflowNodeMapper workflowNodeMapper;
|
||||
private final JobMapper jobMapper;
|
||||
private final JobTaskBatchMapper jobTaskBatchMapper;
|
||||
|
||||
public boolean complete(Long workflowTaskBatchId) throws IOException {
|
||||
public boolean complete(Long workflowTaskBatchId) {
|
||||
return complete(workflowTaskBatchId, null);
|
||||
}
|
||||
|
||||
public boolean complete(Long workflowTaskBatchId, WorkflowTaskBatch workflowTaskBatch) throws IOException {
|
||||
public boolean complete(Long workflowTaskBatchId, WorkflowTaskBatch workflowTaskBatch) {
|
||||
workflowTaskBatch = Optional.ofNullable(workflowTaskBatch)
|
||||
.orElseGet(() -> workflowTaskBatchMapper.selectById(workflowTaskBatchId));
|
||||
Assert.notNull(workflowTaskBatch, () -> new EasyRetryServerException("任务不存在"));
|
||||
@ -83,10 +82,6 @@ public class WorkflowBatchHandler {
|
||||
return false;
|
||||
}
|
||||
|
||||
List<WorkflowNode> workflowNodes = workflowNodeMapper.selectList(new LambdaQueryWrapper<WorkflowNode>()
|
||||
.eq(WorkflowNode::getWorkflowNodeStatus, StatusEnum.YES.getStatus())
|
||||
.in(WorkflowNode::getId, graph.nodes()));
|
||||
|
||||
Map<Long, List<JobTaskBatch>> currentWorkflowNodeMap = jobTaskBatches.stream()
|
||||
.collect(Collectors.groupingBy(JobTaskBatch::getWorkflowNodeId));
|
||||
|
||||
|
@ -39,41 +39,36 @@ public class RunningWorkflowPrepareHandler extends AbstractWorkflowPrePareHandle
|
||||
protected void doHandler(WorkflowTaskPrepareDTO prepare) {
|
||||
log.info("存在运行中的任务. prepare:[{}]", JsonUtil.toJsonString(prepare));
|
||||
|
||||
try {
|
||||
// 1. 若DAG已经支持完成了,由于异常原因导致的没有更新成终态此次进行一次更新操作
|
||||
int blockStrategy = prepare.getBlockStrategy();
|
||||
if (workflowBatchHandler.complete(prepare.getWorkflowTaskBatchId())) {
|
||||
// 开启新的任务
|
||||
blockStrategy = BlockStrategyEnum.CONCURRENCY.getBlockStrategy();
|
||||
} else {
|
||||
// 计算超时时间
|
||||
long delay = DateUtils.toNowMilli() - prepare.getExecutionAt();
|
||||
|
||||
// 2. 判断DAG是否已经支持超时
|
||||
// 计算超时时间,到达超时时间中断任务
|
||||
if (delay > DateUtils.toEpochMilli(prepare.getExecutorTimeout())) {
|
||||
log.info("任务执行超时.workflowTaskBatchId:[{}] delay:[{}] executorTimeout:[{}]",
|
||||
// 1. 若DAG已经支持完成了,由于异常原因导致的没有更新成终态此次进行一次更新操作
|
||||
int blockStrategy = prepare.getBlockStrategy();
|
||||
if (workflowBatchHandler.complete(prepare.getWorkflowTaskBatchId())) {
|
||||
// 开启新的任务
|
||||
blockStrategy = BlockStrategyEnum.CONCURRENCY.getBlockStrategy();
|
||||
} else {
|
||||
// 计算超时时间
|
||||
long delay = DateUtils.toNowMilli() - prepare.getExecutionAt();
|
||||
|
||||
// 2. 判断DAG是否已经支持超时
|
||||
// 计算超时时间,到达超时时间中断任务
|
||||
if (delay > DateUtils.toEpochMilli(prepare.getExecutorTimeout())) {
|
||||
log.info("任务执行超时.workflowTaskBatchId:[{}] delay:[{}] executorTimeout:[{}]",
|
||||
prepare.getWorkflowTaskBatchId(), delay, DateUtils.toEpochMilli(prepare.getExecutorTimeout()));
|
||||
// 超时停止任务
|
||||
workflowBatchHandler.stop(prepare.getWorkflowTaskBatchId(), JobOperationReasonEnum.EXECUTE_TIMEOUT.getReason());
|
||||
}
|
||||
// 超时停止任务
|
||||
workflowBatchHandler.stop(prepare.getWorkflowTaskBatchId(), JobOperationReasonEnum.EXECUTE_TIMEOUT.getReason());
|
||||
}
|
||||
|
||||
// 仅是超时检测的,不执行阻塞策略
|
||||
if (prepare.isOnlyTimeoutCheck()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 支持阻塞策略同JOB逻辑一致
|
||||
BlockStrategy blockStrategyInterface = WorkflowBlockStrategyFactory.getJobTaskStop(blockStrategy);
|
||||
WorkflowBlockStrategyContext workflowBlockStrategyContext = WorkflowTaskConverter.INSTANCE.toWorkflowBlockStrategyContext(
|
||||
prepare);
|
||||
blockStrategyInterface.block(workflowBlockStrategyContext);
|
||||
} catch (IOException e) {
|
||||
log.error("更新任务状态失败. prepare:[{}]", JsonUtil.toJsonString(prepare), e);
|
||||
|
||||
}
|
||||
|
||||
// 仅是超时检测的,不执行阻塞策略
|
||||
if (prepare.isOnlyTimeoutCheck()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 支持阻塞策略同JOB逻辑一致
|
||||
BlockStrategy blockStrategyInterface = WorkflowBlockStrategyFactory.getJobTaskStop(blockStrategy);
|
||||
WorkflowBlockStrategyContext workflowBlockStrategyContext = WorkflowTaskConverter.INSTANCE.toWorkflowBlockStrategyContext(
|
||||
prepare);
|
||||
blockStrategyInterface.block(workflowBlockStrategyContext);
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user