|
@@ -30,7 +30,6 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Component
|
|
@Component
|
|
@Slf4j
|
|
@Slf4j
|
|
@@ -91,36 +90,33 @@ public class ProjectScheduler {
|
|
}
|
|
}
|
|
int simulationLicenseNumber = clusterPO.getNumSimulationLicense();
|
|
int simulationLicenseNumber = clusterPO.getNumSimulationLicense();
|
|
// 获取该用户正在运行的项目数量
|
|
// 获取该用户正在运行的项目数量
|
|
- Set<String> keySet = redisTemplate.keys(redisPrefix.getClusterRunningPrefix() + "*");
|
|
|
|
- if (CollectionUtil.isEmpty(keySet)) {
|
|
|
|
- log.error("ProjectScheduler--dispatchProject 正在运行的项目 " + projectId + " 没有对应的缓存数据!");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ Set<String> clusterRunningKeySet = redisTemplate.keys(redisPrefix.getClusterRunningPrefix() + "*");
|
|
|
|
+ List<String> runningProjectSet;
|
|
// cluster:${clusterId}:running:${projectId}
|
|
// cluster:${clusterId}:running:${projectId}
|
|
- List<String> runningProjectSet = keySet.stream().filter(key -> StringUtil.countSubString(key, ":") == 3).collect(Collectors.toList());
|
|
|
|
- if (CollectionUtil.isNotEmpty(runningProjectSet)) {
|
|
|
|
- long parallelismSum = 0;
|
|
|
|
- for (String runningProjectKey : runningProjectSet) {
|
|
|
|
- parallelismSum += JsonUtil.jsonToBean(redisTemplate.opsForValue().get(runningProjectKey), ProjectMessageDTO.class).getParallelism();
|
|
|
|
- }
|
|
|
|
- if (parallelismSum < simulationLicenseNumber) {
|
|
|
|
- Set<String> waitingProjectSet = redisTemplate.keys(redisPrefix.getClusterWaitingPrefix() + "*");
|
|
|
|
- if (CollectionUtil.isEmpty(waitingProjectSet)) {
|
|
|
|
- return;
|
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(clusterRunningKeySet)) {
|
|
|
|
+ runningProjectSet = projectUtil.getRunningProjectList(clusterRunningKeySet);
|
|
|
|
+ if (CollectionUtil.isNotEmpty(runningProjectSet)) {
|
|
|
|
+ long parallelismSum = 0;
|
|
|
|
+ for (String runningProjectKey : runningProjectSet) {
|
|
|
|
+ parallelismSum += JsonUtil.jsonToBean(redisTemplate.opsForValue().get(runningProjectKey), ProjectMessageDTO.class).getParallelism();
|
|
}
|
|
}
|
|
- for (String waitingProjectKey : waitingProjectSet) {
|
|
|
|
- Long parallelism = JsonUtil.jsonToBean(redisTemplate.opsForValue().get(waitingProjectKey), ProjectMessageDTO.class).getParallelism();
|
|
|
|
- if (parallelismSum + parallelism < simulationLicenseNumber) {
|
|
|
|
- run(clusterId, projectId, redisPrefix.getProjectWaitingKey(), redisPrefix.getProjectRunningKey());
|
|
|
|
|
|
+ if (parallelismSum < simulationLicenseNumber) {
|
|
|
|
+ Set<String> waitingProjectSet = redisTemplate.keys(redisPrefix.getClusterWaitingPrefix() + "*");
|
|
|
|
+ if (CollectionUtil.isEmpty(waitingProjectSet)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ for (String waitingProjectKey : waitingProjectSet) {
|
|
|
|
+ Long parallelism = JsonUtil.jsonToBean(redisTemplate.opsForValue().get(waitingProjectKey), ProjectMessageDTO.class).getParallelism();
|
|
|
|
+ if (parallelismSum + parallelism < simulationLicenseNumber) {
|
|
|
|
+ run(clusterId, projectId, redisPrefix.getProjectWaitingKey(), redisPrefix.getProjectRunningKey());
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- } else {
|
|
|
|
- run(clusterId, projectId, redisPrefix.getProjectWaitingKey(), redisPrefix.getProjectRunningKey());
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ run(clusterId, projectId, redisPrefix.getProjectWaitingKey(), redisPrefix.getProjectRunningKey());
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public void run(String clusterId, String projectId, String projectWaitingKey, String projectRunningKey) {
|
|
public void run(String clusterId, String projectId, String projectWaitingKey, String projectRunningKey) {
|