LingxinMeng 2 жил өмнө
parent
commit
2737c11e31

+ 31 - 12
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/ProjectService.java

@@ -776,35 +776,54 @@ public class ProjectService {
      */
     @SneakyThrows
     public void stopProject(String isChoiceGpu, String projectType, String projectId) {
-        // 将项目状态修改为终止中
+        //* -------------------------------- Comment --------------------------------
+        ProjectEntity projectEntity;
+        String projectUserId, clusterUserId, modelType, projectRunningKeyPrefix;
+        int parallelism;
+        PrefixEntity redisPrefix;
+        Set<String> projectRunningKeySet;
+        boolean isRunning;
+        //* -------------------------------- Comment --------------------------------
+        projectEntity = projectUtil.getProjectByProjectId(projectId);
+        parallelism = Integer.parseInt(projectEntity.getParallelism());
+        redisPrefix = projectUtil.getRedisPrefixByProjectIdAndProjectType(projectId, projectType);
+        projectRunningKeyPrefix = redisPrefix.getProjectRunningKey();
+        //* -------------------------------- Comment --------------------------------
+        //1 判断项目是否已经运行
+        projectRunningKeySet = RedisUtil.getKeySetByPrefix(stringRedisTemplate, projectRunningKeyPrefix);
+        isRunning = !CollectionUtil.isEmpty(projectRunningKeySet);
+        //2 将项目状态修改为终止中
         if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
+            projectEntity = manualProjectMapper.selectById(projectId);
             manualProjectMapper.updateProjectState(projectId, DictConstants.PROJECT_TERMINATING, TimeUtil.getNowForMysql());
         } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
+            projectEntity = autoSubProjectMapper.selectById(projectId);
             autoSubProjectMapper.updateProjectState(projectId, DictConstants.PROJECT_TERMINATING, TimeUtil.getNowForMysql());
+        } else {
+            throw new RuntimeException("未知项目类型:" + projectType);
         }
 
-        //1 判断项目是否已经运行
-        PrefixEntity redisPrefix = projectUtil.getRedisPrefixByProjectIdAndProjectType(projectId, projectType);
-        final String projectRunningKeyPrefix = redisPrefix.getProjectRunningKey();
-        final Set<String> projectRunningKeySet = RedisUtil.getKeySetByPrefix(stringRedisTemplate, projectRunningKeyPrefix);
-        boolean isRunning = !CollectionUtil.isEmpty(projectRunningKeySet);
-
+        projectUserId = projectEntity.getCreateUserId();
+        clusterUserId = projectUtil.getClusterUserIdByProjectUserId(projectUserId);
 
-        //2 删除 kafka 消息
+        //3 删除 kafka 消息
         ApacheKafkaUtil.deleteTopic(kafkaAdminClient, projectId);
-        //3 删除项目所有任务
+        //4 删除项目所有任务
         taskMapper.deleteByProject(projectId);
 
-        //4 根据 pod 前缀删除所有 pod
+        //5 根据 pod 前缀删除所有 pod
+        modelType = projectUtil.getModelTypeByProjectIdAndProjectType(projectId, projectType);
         if (isRunning) {
             Set<String> nodeOfPodKeySet = RedisUtil.getKeySetByPrefix(stringRedisTemplate, "project:" + projectId + ":pod:" + "project-" + projectId);
-            final Set<String> podNameSet = nodeOfPodKeySet.stream().map(key -> key.split(":")[3]).collect(Collectors.toSet());
+            Set<String> podNameSet = nodeOfPodKeySet.stream().map(key -> key.split(":")[3]).collect(Collectors.toSet());
             for (String podName : podNameSet) {
                 String nodeName = projectUtil.getNodeNameOfPod(projectId, podName);
                 // 删除 pod
                 projectUtil.deletePod(podName);
                 // 节点并行度加一
                 projectUtil.incrementOneParallelism(isChoiceGpu, nodeName);
+                // 释放证书
+                projectUtil.releaseLicense(clusterUserId, modelType, parallelism);
             }
         }
 
@@ -825,7 +844,7 @@ public class ProjectService {
         log.info("项目 " + projectId + " 终止成功!");
         if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
             manualProjectMapper.updateProjectState(projectId, DictConstants.PROJECT_TERMINATED, TimeUtil.getNowForMysql());
-        } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
+        } else {
             autoSubProjectMapper.updateProjectState(projectId, DictConstants.PROJECT_TERMINATED, TimeUtil.getNowForMysql());
         }