修改:HPC任务取消&删除优化
This commit is contained in:
@@ -6,5 +6,6 @@ import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DelHpcJobsReq {
|
||||
private List<Long> ids;
|
||||
private List<String> hpcJobIds;
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@ package com.sdm.pbs.controller;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.req.pbs.DelHpcJobsReq;
|
||||
import com.sdm.common.entity.req.pbs.SubmitHpcTaskRemoteReq;
|
||||
import com.sdm.common.feign.inter.pbs.ITaskFeignClient;
|
||||
import com.sdm.common.utils.FilesUtil;
|
||||
import com.sdm.pbs.config.PbsCommonConstant;
|
||||
import com.sdm.pbs.model.bo.BatchWebSubmitResp;
|
||||
import com.sdm.pbs.model.entity.HpcJobStatus;
|
||||
import com.sdm.pbs.model.entity.SimulationJob;
|
||||
import com.sdm.pbs.model.req.BatchHpcTaskReq;
|
||||
import com.sdm.pbs.model.req.OneHpcTaskReq;
|
||||
@@ -30,6 +32,7 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@@ -117,6 +120,113 @@ public class TaskAdapter implements ITaskFeignClient {
|
||||
return SdmResponse.success("提交成功");
|
||||
}
|
||||
|
||||
@GetMapping("/stopHpcJobAdapter")
|
||||
@Operation(summary = "作业停止-根据数据主键")
|
||||
public SdmResponse<Boolean> stopHpcJob(@RequestParam Long id) {
|
||||
if(Objects.isNull(id)) {
|
||||
return SdmResponse.failed("id不能为空");
|
||||
}
|
||||
SimulationJob jobDb = simulationJobService.lambdaQuery().eq(SimulationJob::getId,id).one();
|
||||
if(Objects.isNull(jobDb)) {
|
||||
return SdmResponse.failed("数据不存在");
|
||||
}
|
||||
if(jobDb.getJobStatus().equals(HpcJobStatus.Canceled.name())||
|
||||
jobDb.getJobStatus().equals(HpcJobStatus.Finished.name())||
|
||||
jobDb.getJobStatus().equals(HpcJobStatus.Failed.name())) {
|
||||
return SdmResponse.failed("任务状态为完成态,不能取消");
|
||||
}
|
||||
// 未入hpc节点的
|
||||
if(StringUtils.isBlank(jobDb.getJobId())){
|
||||
log.info("stopHpcJobAdapter 未入hpc节点的,更新状态为已取消jobName:{}",jobDb.getJobName());
|
||||
}else {
|
||||
SdmResponse<Boolean> response = taskController.stopHpcJob(jobDb.getJobId());
|
||||
if(!response.isSuccess()){
|
||||
throw new RuntimeException("hpc作业取消失败");
|
||||
}
|
||||
log.info("stopHpcJobAdapter 已入hpc节点的,更新状态为已取消jobName:{}",jobDb.getJobName());
|
||||
}
|
||||
jobDb.setJobStatus(HpcJobStatus.Canceled.name());
|
||||
boolean b = simulationJobService.updateById(jobDb);
|
||||
log.info("stopHpcJobAdapter 更新状态为已取消jobName:{},b:{}",jobDb.getJobName(),b);
|
||||
return SdmResponse.success(b);
|
||||
}
|
||||
|
||||
@PostMapping("/delHpcJobsAdapter")
|
||||
@Operation(summary = "批量删除Hpc任务")
|
||||
public SdmResponse delHpcJobsAdapter(@RequestBody DelHpcJobsReq req) {
|
||||
// 1. 入参校验
|
||||
if (CollectionUtils.isEmpty(req.getIds())) {
|
||||
return SdmResponse.failed("删除数据id不能为空");
|
||||
}
|
||||
|
||||
// 2. 查询任务列表
|
||||
List<SimulationJob> jobList = simulationJobService.lambdaQuery()
|
||||
.select(SimulationJob::getId, SimulationJob::getJobId, SimulationJob::getJobStatus)
|
||||
.in(SimulationJob::getId, req.getIds())
|
||||
.list();
|
||||
if (CollectionUtils.isEmpty(jobList)) {
|
||||
return SdmResponse.failed("未查询到对应任务数据");
|
||||
}
|
||||
|
||||
for (SimulationJob job : jobList) {
|
||||
if(!HpcJobStatus.getFinishedStatusNames().contains(job.getJobStatus())) {
|
||||
throw new RuntimeException("数据任务状态非完成态,不能删除");
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 分组:空jobId / 有效jobId
|
||||
List<Long> emptyJobIds = filterEmptyJobIds(jobList);
|
||||
List<String> validJobIds = filterValidJobIds(jobList);
|
||||
|
||||
// 4. 处理本地标记删除
|
||||
updateDelFlagForEmptyJobs(emptyJobIds);
|
||||
|
||||
// 5. 有有效ID则调用HPC删除
|
||||
if (CollectionUtils.isNotEmpty(validJobIds)) {
|
||||
DelHpcJobsReq delHpcJobsReq = new DelHpcJobsReq();
|
||||
delHpcJobsReq.setHpcJobIds(validJobIds);
|
||||
return taskController.delHpcJobs(delHpcJobsReq);
|
||||
}
|
||||
|
||||
return SdmResponse.success("批量删除HPC任务成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 筛选出 jobId 为空的 主键ID
|
||||
*/
|
||||
private List<Long> filterEmptyJobIds(List<SimulationJob> jobList) {
|
||||
return jobList.stream()
|
||||
.filter(job -> StringUtils.isBlank(job.getJobId()))
|
||||
.map(SimulationJob::getId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 筛选出 jobId 不为空的 有效HPC任务ID
|
||||
*/
|
||||
private List<String> filterValidJobIds(List<SimulationJob> jobList) {
|
||||
return jobList.stream()
|
||||
.filter(job -> StringUtils.isNotBlank(job.getJobId()))
|
||||
.map(SimulationJob::getJobId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量更新 delFlag = Y
|
||||
*/
|
||||
private void updateDelFlagForEmptyJobs(List<Long> emptyJobIds) {
|
||||
if (CollectionUtils.isEmpty(emptyJobIds)) {
|
||||
return;
|
||||
}
|
||||
boolean updateSuccess = simulationJobService.lambdaUpdate()
|
||||
.in(SimulationJob::getId, emptyJobIds)
|
||||
.set(SimulationJob::getDelFlag, "Y")
|
||||
.update();
|
||||
log.info("[HPC任务删除] 本地标记删除成功,数量:{},结果:{}", emptyJobIds.size(), updateSuccess);
|
||||
}
|
||||
|
||||
|
||||
private void getSimulationFile(SubmitHpcTaskRemoteReq req,SubmitHpcTaskReq submitHpcTaskReq,String batchFilePath ) {
|
||||
log.info("提交请求参数:{}", JSONObject.toJSONString(req));
|
||||
String masterFilepath="";
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.sdm.pbs.model.entity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum HpcJobStatus {
|
||||
@@ -16,4 +18,18 @@ public enum HpcJobStatus {
|
||||
Failed("任务失败");
|
||||
|
||||
private final String desc;
|
||||
|
||||
/**
|
||||
* 获取所有完成态的枚举名称(name)集合
|
||||
* 完成态:已取消、已完成、任务失败
|
||||
*/
|
||||
public static List<String> getFinishedStatusNames() {
|
||||
return List.of(
|
||||
Canceled.name(),
|
||||
Finished.name(),
|
||||
Failed.name()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user