|
@@ -776,35 +776,54 @@ public class ProjectService {
|
|
|
*/
|
|
|
@SneakyThrows
|
|
|
public void stopProject(String isChoiceGpu, String projectType, String projectId) {
|
|
|
-
|
|
|
+
|
|
|
+ ProjectEntity projectEntity;
|
|
|
+ String projectUserId, clusterUserId, modelType, projectRunningKeyPrefix;
|
|
|
+ int parallelism;
|
|
|
+ PrefixEntity redisPrefix;
|
|
|
+ Set<String> projectRunningKeySet;
|
|
|
+ boolean isRunning;
|
|
|
+
|
|
|
+ projectEntity = projectUtil.getProjectByProjectId(projectId);
|
|
|
+ parallelism = Integer.parseInt(projectEntity.getParallelism());
|
|
|
+ redisPrefix = projectUtil.getRedisPrefixByProjectIdAndProjectType(projectId, projectType);
|
|
|
+ projectRunningKeyPrefix = redisPrefix.getProjectRunningKey();
|
|
|
+
|
|
|
+
|
|
|
+ projectRunningKeySet = RedisUtil.getKeySetByPrefix(stringRedisTemplate, projectRunningKeyPrefix);
|
|
|
+ isRunning = !CollectionUtil.isEmpty(projectRunningKeySet);
|
|
|
+
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- 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);
|
|
|
|
|
|
-
|
|
|
+
|
|
|
ApacheKafkaUtil.deleteTopic(kafkaAdminClient, projectId);
|
|
|
-
|
|
|
+
|
|
|
taskMapper.deleteByProject(projectId);
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+ 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);
|
|
|
|
|
|
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());
|
|
|
}
|
|
|
|