feat(1.4.0-beta1): 1. 修复重试任务批量删除失败问题

This commit is contained in:
opensnail 2025-02-23 19:47:10 +08:00
parent abe08bed5c
commit c32d1c5426
6 changed files with 33 additions and 24 deletions

View File

@ -41,7 +41,7 @@ public class RetryController {
@LoginRequired
@PutMapping("status")
public int updateRetryTaskStatus(@RequestBody RetryUpdateStatusRequestVO retryUpdateStatusRequestVO) {
return retryService.updateRetryTaskStatus(retryUpdateStatusRequestVO);
return retryService.updateRetryStatus(retryUpdateStatusRequestVO);
}
@LoginRequired

View File

@ -1,8 +1,8 @@
package com.aizuda.snailjob.server.web.model.request;
import com.aizuda.snailjob.common.core.enums.RetryStatusEnum;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
/**
* 重试数据模型

View File

@ -30,7 +30,7 @@ public interface RetryService {
* @param retryUpdateStatusRequestVO 更新重试任务状态请求模型
* @return
*/
int updateRetryTaskStatus(RetryUpdateStatusRequestVO retryUpdateStatusRequestVO);
int updateRetryStatus(RetryUpdateStatusRequestVO retryUpdateStatusRequestVO);
/**
* 手动新增重试任务

View File

@ -54,8 +54,10 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import java.time.LocalDateTime;
import java.util.*;
@ -83,6 +85,8 @@ public class RetryServiceImpl implements RetryService {
private List<TaskGenerator> taskGenerators;
@Autowired
private RetryTaskLogMessageMapper retryTaskLogMessageMapper;
@Autowired
private TransactionTemplate transactionTemplate;
@Override
public PageResult<List<RetryResponseVO>> getRetryPage(RetryQueryVO queryVO) {
@ -141,7 +145,7 @@ public class RetryServiceImpl implements RetryService {
@Override
@Transactional
public int updateRetryTaskStatus(RetryUpdateStatusRequestVO requestVO) {
public int updateRetryStatus(RetryUpdateStatusRequestVO requestVO) {
RetryStatusEnum retryStatusEnum = RetryStatusEnum.getByStatus(requestVO.getRetryStatus());
if (Objects.isNull(retryStatusEnum)) {
@ -178,13 +182,6 @@ public class RetryServiceImpl implements RetryService {
retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli());
SnailJobLog.REMOTE.info("=============手动操作完成============. <|>{}<|>", retryLogMetaDTO);
}
//
// RetryTask retryTask = new RetryTask();
// retryTask.setTaskStatus(requestVO.getRetryStatus());
// retryTaskMapper.update(retryTask, new LambdaUpdateWrapper<RetryTask>()
// .eq(RetryTask::getNamespaceId, namespaceId)
// .eq(RetryTask::getUniqueId, retry.getUniqueId())
// .eq(RetryTask::getGroupName, retry.getGroupName()));
retry.setUpdateDt(LocalDateTime.now());
return retryTaskAccess.updateById(retry);
@ -351,6 +348,7 @@ public class RetryServiceImpl implements RetryService {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
transactionTemplate.execute((status -> {
map.forEach(((sceneName, retryTaskDTOS) -> {
TaskContext taskContext = new TaskContext();
taskContext.setSceneName(sceneName);
@ -360,7 +358,15 @@ public class RetryServiceImpl implements RetryService {
taskContext.setTaskInfos(TaskContextConverter.INSTANCE.convert(retryTaskDTOS));
// 生成任务
try {
taskGenerator.taskGenerator(taskContext);
} catch (DuplicateKeyException e) {
throw new SnailJobServerException("namespaceId:[{}] groupName:[{}] sceneName:[{}] 任务已经存在",
namespaceId, parseLogsVO.getGroupName(), sceneName);
}
}));
return Boolean.TRUE;
}));
return waitInsertList.size();

View File

@ -197,7 +197,7 @@ public class RetryTaskServiceImpl implements RetryTaskService {
List<RetryTask> retryTasks = retryTaskMapper.selectList(
new LambdaQueryWrapper<RetryTask>()
.in(RetryTask::getTaskStatus, List.of(RetryStatusEnum.FINISH.getStatus(), RetryStatusEnum.MAX_COUNT.getStatus()))
.in(RetryTask::getTaskStatus, RetryTaskStatusEnum.TERMINAL_STATUS_SET)
.eq(RetryTask::getNamespaceId, namespaceId)
.in(RetryTask::getId, ids));
Assert.notEmpty(retryTasks, () -> new SnailJobServerException("数据不存在"));
@ -216,8 +216,11 @@ public class RetryTaskServiceImpl implements RetryTaskService {
@Override
public Boolean stopById(Long id) {
Retry retry = retryMapper.selectById(id);
Assert.notNull(retry, () -> new SnailJobServerException("没有可执行的任务"));
RetryTask retryTask = retryTaskMapper.selectById(id);
Assert.notNull(retryTask, () -> new SnailJobServerException("没有可执行的任务"));
Retry retry = retryMapper.selectById(retryTask.getRetryId());
Assert.notNull(retry, () -> new SnailJobServerException("任务不存在"));
TaskStopJobDTO taskStopJobDTO = RetryConverter.INSTANCE.toTaskStopJobDTO(retry);
taskStopJobDTO.setOperationReason(RetryOperationReasonEnum.MANNER_STOP.getReason());