Browse Source

项目即将完成时不再启动新的 pod

martin 2 years ago
parent
commit
d406488e23

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

@@ -127,13 +127,18 @@ public class TaskManager {
                 ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(stringRedisTemplate.opsForValue().get(redisPrefix.getProjectRunningKey()), ProjectMessageDTO.class);
                 int taskTotal = projectMessageDTO.getTaskTotal();
                 int taskCompleted = projectMessageDTO.getTaskCompleted();
+                Integer currentParallelism = projectMessageDTO.getCurrentParallelism();
                 log.info("TaskManager--isProjectCompleted 项目 " + projectId + " 完成进度为:" + (taskCompleted + 1) + "/" + taskTotal);
                 if (taskCompleted + 1 == taskTotal) {
                     return true;
-                } else {
-                    projectMessageDTO.setTaskCompleted(taskCompleted + 1);
+                } else {    // 项目没有完成
+                    projectMessageDTO.setTaskCompleted(taskCompleted + 1);  // 增加已完成任务数
                     stringRedisTemplate.opsForValue().set(redisPrefix.getProjectRunningKey(), JsonUtil.beanToJson(projectMessageDTO));
-                    createNextPod(projectId, nodeName, podName);  // 项目没有完成则启动下一个 pod,同时删除上一个 pod
+                    if (taskTotal - taskCompleted <= currentParallelism) {
+                        projectUtil.addOneParallelismToNode(nodeName);  // 如果 taskTotal - taskCompleted 小于 currentParallelism ,则不启动下一个 pod 并归还一个并行度
+                    } else {
+                        createNextPod(projectId, nodeName, podName);  // 删除上一个 pod,并启动下一个 pod
+                    }
                     return false;
                 }
             } catch (Exception exception) {