|
@@ -313,23 +313,28 @@ public class ProjectConsumer {
|
|
|
String roleCode = userEntity.getRoleCode();
|
|
|
String useType = userEntity.getUseType();
|
|
|
ClusterEntity clusterEntity;
|
|
|
- String clusterUserId = projectUserId; // 项目实际运行使用的用户集群
|
|
|
+ String clusterUserId; // 项目实际运行使用的用户集群
|
|
|
if (DictConstants.ROLE_CODE_SYSADMIN.equals(roleCode) || DictConstants.ROLE_CODE_ADMIN.equals(roleCode)) { //3-1 管理员账户和管理员子账户直接执行
|
|
|
+ clusterUserId = DictConstants.SYSTEM_CLUSTER_ID;
|
|
|
log.info("项目 " + projectId + " 的创建人 " + projectUserId + " 为管理员账户或管理员子账户,直接判断服务器能否执行。");
|
|
|
PrefixEntity redisPrefix = projectUtil.getRedisPrefixByClusterIdAndProjectId(DictConstants.SYSTEM_CLUSTER_ID, projectId);
|
|
|
- run(projectMessageDTO, DictConstants.SYSTEM_CLUSTER_ID, modelType, DictConstants.SYSTEM_USER_ID, redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
+ run(projectMessageDTO, clusterUserId, modelType, DictConstants.SYSTEM_USER_ID, redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
return;
|
|
|
} else if (DictConstants.ROLE_CODE_UESR.equals(roleCode)) { //3-2 普通账户,不管是独占还是共享,都在自己的集群里排队,根据自己的独占节点排队
|
|
|
+ clusterUserId = projectUserId;
|
|
|
clusterEntity = clusterMapper.selectByUserId(clusterUserId);
|
|
|
log.info("项目 " + projectId + " 的创建人 " + projectUserId + " 为普通账户(包括独占或共享都在自己的集群),集群为:" + clusterEntity);
|
|
|
} else if (DictConstants.ROLE_CODE_SUBUESR.equals(roleCode)) {
|
|
|
if (DictConstants.USER_TYPE_EXCLUSIVE.equals(useType)) { //3-3 普通子账户,根据自己的独占节点排队
|
|
|
+ clusterUserId = projectUserId;
|
|
|
clusterEntity = clusterMapper.selectByUserId(clusterUserId);
|
|
|
log.info("项目 " + projectId + " 的创建人 " + projectUserId + " 为普通独占子账户(自己的集群),集群为:" + clusterEntity);
|
|
|
- } else { //3-4 共享子账户,根据父账户的共享节点排队
|
|
|
+ } else if (DictConstants.USER_TYPE_PUBLIC.equals(useType)) { //3-4 共享子账户,根据父账户的共享节点排队
|
|
|
clusterUserId = userEntity.getCreateUserId();
|
|
|
clusterEntity = clusterMapper.selectByUserId(clusterUserId);
|
|
|
log.info("项目 " + projectId + " 的创建人 " + projectUserId + " 为普通共享子账户(父账户的集群),集群为:" + clusterEntity);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("用户" + projectUserId + "未知占用类型:" + useType);
|
|
|
}
|
|
|
} else {
|
|
|
throw new RuntimeException("未知角色类型:" + roleCode);
|
|
@@ -341,7 +346,7 @@ public class ProjectConsumer {
|
|
|
// int currentParallelismSum = projectUtil.getCurrentParallelismSum(redisPrefix.getClusterRunningPrefix());
|
|
|
// 如果执行后的并行度总和小于最大节点数则执行,否则不执行
|
|
|
if (projectUtil.getUsingLicenseNumber(clusterUserId, DictConstants.MODEL_TYPE_VTD) + parallelism <= clusterEntity.getNumSimulationLicense()) {
|
|
|
- run(projectMessageDTO, projectUserId, modelType, clusterEntity.getId(), redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
+ run(projectMessageDTO, clusterUserId, modelType, clusterEntity.getId(), redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
} else {
|
|
|
log.info("VTD 项目 " + projectId + " 并行度超出账户允许,加入等待队列,暂不执行。 ");
|
|
|
wait(redisPrefix.getProjectWaitingKey(), projectMessageDTO);
|
|
@@ -352,7 +357,7 @@ public class ProjectConsumer {
|
|
|
// int currentParallelismSum = projectUtil.getCurrentParallelismSum(redisPrefix.getClusterRunningPrefix());
|
|
|
// 如果执行后的并行度总和小于最大节点数则执行,否则不执行
|
|
|
if (projectUtil.getUsingLicenseNumber(clusterUserId, DictConstants.MODEL_TYPE_VTD) + parallelism <= clusterEntity.getNumSimulationLicense() && projectUtil.getUsingLicenseNumber(clusterUserId, DictConstants.MODEL_TYPE_CARSIM) + parallelism <= clusterEntity.getNumDynamicLicense()) {
|
|
|
- run(projectMessageDTO,clusterUserId, modelType, clusterEntity.getId(), redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
+ run(projectMessageDTO, clusterUserId, modelType, clusterEntity.getId(), redisPrefix.getProjectRunningKey(), redisPrefix.getProjectWaitingKey());
|
|
|
} else {
|
|
|
log.info("CARSIM 项目 " + projectId + " 并行度超出账户允许,加入等待队列,暂不执行。 ");
|
|
|
wait(redisPrefix.getProjectWaitingKey(), projectMessageDTO);
|