修改:HPC优化

This commit is contained in:
yangyang01000846
2025-12-05 18:09:41 +08:00
parent 9b48988af8
commit 220a126a7b
10 changed files with 160 additions and 59 deletions

View File

@@ -0,0 +1,71 @@
package com.sdm.pbs.controller;
import com.sdm.common.common.SdmResponse;
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.model.req.SubmitHpcTaskReq;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@Slf4j
@RestController
@RequestMapping("/pbs")
@Tag(name = "HPC调度", description = "与hpc交互的前置增强接口")
public class TaskAdapter implements ITaskFeignClient {
@Autowired
private TaskController taskController;
@PostMapping(value = "/adapterSubmitHpcJob", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "作业提交")
public SdmResponse<String> adapterSubmitHpcJob(SubmitHpcTaskRemoteReq req) {
// spdm 回传路径
// 求解文件获取,可以在这一层分片上传,然后拿到对应的路径
getSimulationFile(req);
SubmitHpcTaskReq submitHpcTaskReq = new SubmitHpcTaskReq();
BeanUtils.copyProperties(req,submitHpcTaskReq);
return taskController.submitHpcJob(submitHpcTaskReq);
}
private void getSimulationFile(SubmitHpcTaskRemoteReq req){
String simulationFileLocalPath = req.getSimulationFileLocalPath();
String masterFileRegularStr = req.getMasterFileRegularStr();
String inputFilesRegularStr = req.getInputFilesRegularStr();
// 获取所有文件名字
// 符合正则的从文件
AtomicReference<String> masterFilePath = new AtomicReference<>();
// 符合正则的主文件
List<String> inputFilePaths=new ArrayList<>();
FilesUtil.collectFiles(simulationFileLocalPath,masterFileRegularStr,inputFilesRegularStr,masterFilePath,inputFilePaths);
try {
MultipartFile masterMultipartFile = FilesUtil.toMultipartFile(masterFilePath.get());
req.setMasterFile(masterMultipartFile);
if(CollectionUtils.isNotEmpty(inputFilePaths)){
List<MultipartFile> inputFiles = new ArrayList<>();
for (String inputFilePath : inputFilePaths) {
MultipartFile inputFile = FilesUtil.toMultipartFile(inputFilePath);
inputFiles.add(inputFile);
}
req.setInputFiles(inputFiles);
}
} catch (Exception e) {
log.error("getSimulationFile error",e);
throw new RuntimeException("求解文件处理失败");
}
}
}

View File

@@ -3,7 +3,6 @@ package com.sdm.pbs.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.pbs.HpcTaskFileDownReq;
import com.sdm.common.entity.req.pbs.HpcTaskFileReq;
import com.sdm.common.entity.req.pbs.SubmitHpcTaskRemoteReq;
import com.sdm.common.entity.req.pbs.hpc.*;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.entity.resp.pbs.hpc.*;
@@ -11,7 +10,6 @@ import com.sdm.common.entity.resp.pbs.hpc.listjobs.ListJobResp;
import com.sdm.common.entity.resp.pbs.hpc.listtasks.ListTasksResp;
import com.sdm.common.entity.resp.pbs.hpc.nodecore.NodeListCoreResp;
import com.sdm.common.entity.resp.pbs.hpc.nodelist.NodeListResp;
import com.sdm.common.feign.inter.pbs.ITaskFeignClient;
import com.sdm.common.utils.HpcCommandExcuteUtil;
import com.sdm.pbs.model.bo.HpcJobStatusInfo;
import com.sdm.pbs.model.bo.HpcResouceInfo;
@@ -26,7 +24,6 @@ import com.sdm.pbs.service.impl.PbsServiceDecorator;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.MediaType;
@@ -41,7 +38,7 @@ import java.util.Map;
@RestController
@RequestMapping("/pbs")
@Tag(name = "HPC调度", description = "与hpc交互的接口")
public class TaskController implements ITaskFeignClient {
public class TaskController {
@Autowired
private HpcInstructionService hpcInstructionService;
@@ -75,10 +72,8 @@ public class TaskController implements ITaskFeignClient {
@PostMapping(value = "/submitHpcJob", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "作业提交")
public SdmResponse<String> submitHpcJob(SubmitHpcTaskRemoteReq req) {
SubmitHpcTaskReq submitHpcTaskReq = new SubmitHpcTaskReq();
BeanUtils.copyProperties(req,submitHpcTaskReq);
return pbsService.submitHpcJob(submitHpcTaskReq);
public SdmResponse<String> submitHpcJob(SubmitHpcTaskReq req) {
return pbsService.submitHpcJob(req);
}
@GetMapping("/stopHpcJob")

View File

@@ -95,9 +95,13 @@ public class SimulationJob implements Serializable {
@TableField("stdoutHpcFilePath")
private String stdoutHpcFilePath;
@Schema(description = "记录在minio上任务执行输出的文件在Hpc的绝对路径baseDir+jobName文件回传)+uuid文件回传),下面可能有多个文件")
@TableField("stdoutSpdmFilePath")
private String stdoutSpdmFilePath;
@Schema(description = "minio上任务执行输出的文件在Hpc的绝对路径baseDir+jobName文件回传)+uuid文件回传),下面可能有多个文件")
@TableField("stdoutSpdmMinoFilePath")
private String stdoutSpdmMinoFilePath;
@Schema(description = "本地nas任务执行输出的文件在Hpc的绝对路径baseDir+jobName文件回传)+uuid文件回传),下面可能有多个文件")
@TableField("stdoutSpdmNasFilePath")
private String stdoutSpdmNasFilePath;
@Schema(description = "节点名称")
@TableField("nodeName")

View File

@@ -66,6 +66,17 @@ public class SubmitHpcTaskReq {
@Schema(description = "软件的id")
public Long softwareId;
@Schema(description = "计算任务回传minio的路径")
public String stdoutSpdmMinoFilePath;
@Schema(description = "计算任务回传本地Nas的路径")
public String stdoutSpdmNasFilePath;
@Schema(description = "主文件本地路径,spdm工作流引擎会传递过来")
public String masterFileLocalPath;
@Schema(description = "求解文件本地路径,spdm工作流引擎会传递过来")
public List<String> inputFileLocalPaths = new ArrayList<>();
}

View File

@@ -120,7 +120,8 @@ public class PbsServiceDecorator implements IPbsServiceDecorator {
simulationJob.setJobDetailId("todo");
// 文件路径 todo 共享目录+jobName文件回传)+uuid下面可能有多个文件
simulationJob.setStdoutHpcFilePath(hpcOutPutDir);
simulationJob.setStdoutSpdmFilePath("/minio/base/job001/uuid-123");
simulationJob.setStdoutSpdmMinoFilePath(req.getStdoutSpdmMinoFilePath());
simulationJob.setStdoutSpdmNasFilePath(req.getStdoutSpdmNasFilePath());
// todo 执行信息 定时任务回传的时候修改
simulationJob.setNodeName("todo");
simulationJob.setExecutCommand("ansys -b -input input.dat -output output.log");