Browse Source

获取执行节点 map

martin 2 years ago
parent
commit
c94d0f55dd

+ 1 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ProjectConsumer.java

@@ -157,7 +157,7 @@ public class ProjectConsumer {
         }
         //2 判断剩余可用并行度是否大于项目并行度,否则加入扩充队列
         if (parallelismSum > 0L) {
-            log.info("ProjectConsumer--run 集群 " + clusterId + " 将项目 " + projectId + "在节点 " + nodeMap + " 上以并行度 " + parallelismSum + " 执行!");
+            log.info("ProjectConsumer--run 集群 " + clusterId + " 将项目 " + projectId + "在节点 " + nodeMap + " 上执行!");
             projectMessageDTO.setCurrentParallelism(parallelismSum);    // 设置实际的并行度
             parseProject(nodeMap, projectMessageDTO, "cluster:" + clusterId, projectRunningKey);
         } else {

+ 8 - 6
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/manager/TaskManager.java

@@ -96,7 +96,7 @@ public class TaskManager {
             log.info("TaskManager--state 修改任务 " + taskId + " 的状态为 " + state + ",pod 名称为:" + podName);
             taskMapper.updateStateWithStartTime(taskId, state, TimeUtil.getNowForMysql());
             return false;
-        } else { // 出错和结束的 pod 都直接删除
+        } else { // 结束的 pod 都直接删除
             // -------------------------------- 处理状态 --------------------------------
             //TODO 暂时不用重试操作
             try {
@@ -137,12 +137,13 @@ public class TaskManager {
             ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(stringRedisTemplate.opsForValue().get(redisPrefix.getProjectRunningKey()), ProjectMessageDTO.class);
             int taskTotal = projectMessageDTO.getTaskTotal();
             int taskCompleted = projectMessageDTO.getTaskCompleted();
-            log.info("TaskManager--isProjectCompleted 项目 " + projectId + " 完成进度为:" + (taskCompleted + 1) + "/" + taskCompleted);
+            log.info("TaskManager--isProjectCompleted 项目 " + projectId + " 完成进度为:" + (taskCompleted + 1) + "/" + taskTotal);
             if (taskCompleted + 1 == taskTotal) {
                 return true;
             } else {
                 projectMessageDTO.setTaskCompleted(taskCompleted + 1);
                 stringRedisTemplate.opsForValue().set(redisPrefix.getProjectRunningKey(), JsonUtil.beanToJson(projectMessageDTO));
+                createNextPod(projectId, podName);  // 项目没有完成则启动下一个 pod
                 return false;
             }
         }
@@ -152,14 +153,15 @@ public class TaskManager {
      * 更改一个名字继续启动
      *
      * @param projectId 项目 id
-     * @param podName   项目名称
+     * @param lastPodName   项目名称
      */
     @SneakyThrows
-    public void createNextPod(String projectId, String podName) {
-        String lastPodString = FileUtil.read(podYamlDirectory + podName + ".yaml");
+    public void createNextPod(String projectId, String lastPodName) {
+        String lastPodString = FileUtil.read(podYamlDirectory + lastPodName + ".yaml");
         String nextPodName = "project-" + projectId + "-" + StringUtil.getRandomUUID();
-        String nextPodString = lastPodString.replace("pod-name", podName); // pod 名称包括 projectId 和 随机字符串
+        String nextPodString = lastPodString.replace(lastPodName, nextPodName); // pod 名称包括 projectId 和 随机字符串
         String nextPodFileName = nextPodName + ".yaml";     // 实际执行 pod 的文件名称
+        log.info("TaskManager--createNextPod 创建项目 " + projectId + " 的下一个 pod。");
         projectUtil.createPod(nextPodString, nextPodFileName);
     }
 

+ 1 - 2
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java

@@ -49,8 +49,7 @@ public class TaskService {
         PrefixTO redisPrefix = projectUtil.getRedisPrefixByUserIdAndProjectIdAndTaksId(userId, projectId, taskId);  // 项目前缀
         //1 判断项目是否已完成
         boolean projectCompleted = taskManager.isProjectCompleted(redisPrefix, projectId, taskId, state, podName);
-        if (!projectCompleted) { // 项目没有完成则启动下一个 pod
-            taskManager.createNextPod(projectId, podName);
+        if (!projectCompleted) {
             return;
         }
         SshClient sshClient = SshUtil.getClient();