|
@@ -1,5 +1,6 @@
|
|
package com.css.simulation.resource.scheduler.service;
|
|
package com.css.simulation.resource.scheduler.service;
|
|
|
|
|
|
|
|
+import com.css.simulation.resource.scheduler.configuration.redis.CustomRedisClient;
|
|
import com.css.simulation.resource.scheduler.entity.PrefixEntity;
|
|
import com.css.simulation.resource.scheduler.entity.PrefixEntity;
|
|
import com.css.simulation.resource.scheduler.entity.ProjectEntity;
|
|
import com.css.simulation.resource.scheduler.entity.ProjectEntity;
|
|
import com.css.simulation.resource.scheduler.entity.TaskEntity;
|
|
import com.css.simulation.resource.scheduler.entity.TaskEntity;
|
|
@@ -20,37 +21,41 @@ public class TaskService {
|
|
private TaskMapper taskMapper;
|
|
private TaskMapper taskMapper;
|
|
@Resource
|
|
@Resource
|
|
private ProjectUtil projectUtil;
|
|
private ProjectUtil projectUtil;
|
|
|
|
+ @Resource
|
|
|
|
+ private CustomRedisClient customRedisClient;
|
|
|
|
+
|
|
|
|
|
|
// -------------------------------- Comment --------------------------------
|
|
// -------------------------------- Comment --------------------------------
|
|
|
|
|
|
@SneakyThrows
|
|
@SneakyThrows
|
|
public void taskState(String taskId, String state, String podName) {
|
|
public void taskState(String taskId, String state, String podName) {
|
|
- log.info("接收到参数为:taskId={},state={},podName={}", taskId, state, podName);
|
|
|
|
- TaskEntity taskEntity = taskMapper.selectById(taskId);
|
|
|
|
- if (taskEntity == null) {
|
|
|
|
- log.info("接收到已删除但还在执行的任务:taskId={},state={},podName={}", taskId, state, podName);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- String projectId = taskEntity.getPId(); // 项目 id
|
|
|
|
- ProjectEntity projectEntity = projectUtil.getProjectByProjectId(projectId);
|
|
|
|
- String projectType = projectEntity.getProjectType(); // 项目类型
|
|
|
|
- String maxSimulationTime = projectEntity.getMaxSimulationTime(); // 项目类型
|
|
|
|
- String userId = taskEntity.getCreateUserId(); // 用户 id
|
|
|
|
- PrefixEntity redisPrefix = projectUtil.getRedisPrefixByUserIdAndProjectIdAndTaskId(userId, projectId, taskId); // 项目前缀
|
|
|
|
- log.info("判断项目是否已完成。");
|
|
|
|
- boolean projectCompleted = taskManager.isProjectCompleted(redisPrefix, projectId, projectType, maxSimulationTime, taskId, state, podName);
|
|
|
|
- if (!projectCompleted) {
|
|
|
|
- return;
|
|
|
|
|
|
+ String lockName = "taskId:" + taskId + ":state:" + state + ":pod-name:" + podName;
|
|
|
|
+ customRedisClient.lock(lockName, 30 * 60L, 7);
|
|
|
|
+ try {
|
|
|
|
+ TaskEntity taskEntity = taskMapper.selectById(taskId);
|
|
|
|
+ String projectId = taskEntity.getPId(); // 项目 id
|
|
|
|
+ ProjectEntity projectEntity = projectUtil.getProjectByProjectId(projectId);
|
|
|
|
+ String projectType = projectEntity.getProjectType(); // 项目类型
|
|
|
|
+ String maxSimulationTime = projectEntity.getMaxSimulationTime(); // 项目类型
|
|
|
|
+ String userId = taskEntity.getCreateUserId(); // 用户 id
|
|
|
|
+ PrefixEntity redisPrefix = projectUtil.getRedisPrefixByUserIdAndProjectIdAndTaskId(userId, projectId, taskId); // 项目前缀
|
|
|
|
+ log.info("判断项目 {} 是否已完成。", projectId);
|
|
|
|
+ boolean projectCompleted = taskManager.isProjectCompleted(redisPrefix, projectId, projectType, maxSimulationTime, taskId, state, podName);
|
|
|
|
+ if (!projectCompleted) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ log.info("项目 {} 准备打分。", projectId);
|
|
|
|
+ taskManager.prepareScore(redisPrefix.getProjectRunningKey());
|
|
|
|
+ log.info("项目 {} 开始打分。", projectId);
|
|
|
|
+ taskManager.score(userId, projectId, projectType);
|
|
|
|
+ log.info("项目 {} 计算评价等级。", projectId);
|
|
|
|
+ taskManager.evaluationLevel(projectId);
|
|
|
|
+ log.info("项目 {} 开始释放资源。", projectId);
|
|
|
|
+ taskManager.done(redisPrefix, projectId, projectType);
|
|
|
|
+ log.info("项目 {} 运行结束。", projectId);
|
|
|
|
+ } finally {
|
|
|
|
+ customRedisClient.unlock(lockName);
|
|
}
|
|
}
|
|
- log.info("项目 {} 准备打分。", projectId);
|
|
|
|
- taskManager.prepareScore(redisPrefix.getProjectRunningKey());
|
|
|
|
- log.info("项目 {} 开始打分。", projectId);
|
|
|
|
- taskManager.score(userId, projectId, projectType);
|
|
|
|
- log.info("项目 {} 计算评价等级。", projectId);
|
|
|
|
- taskManager.evaluationLevel(projectId);
|
|
|
|
- log.info("项目 {} 开始释放资源。", projectId);
|
|
|
|
- taskManager.done(redisPrefix, projectId, projectType);
|
|
|
|
- log.info("项目 {} 运行结束。", projectId);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|