diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java index 1ec974445d..f77be9fa1a 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java @@ -297,7 +297,9 @@ public enum Status { PLUGIN_INSTANCE_ALREADY_EXIT(110010, "plugin instance already exit", "该告警插件实例已存在"), LIST_PAGING_ALERT_PLUGIN_INSTANCE_ERROR(110011, "query plugin instance page error", "分页查询告警实例失败"), DELETE_ALERT_PLUGIN_INSTANCE_ERROR_HAS_ALERT_GROUP_ASSOCIATED(110012, "failed to delete the alert instance, there is an alarm group associated with this alert instance", - "删除告警实例失败,存在与此告警实例关联的警报组"); + "删除告警实例失败,存在与此告警实例关联的警报组"), + PROCESS_DEFINITION_VERSION_IS_USED(110013,"this process definition version is used","此工作流定义版本被使用"); + private final int code; private final String enMsg; diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java index 82651dde74..be07225cd7 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java @@ -274,5 +274,14 @@ public interface ProcessDefinitionService { */ Map switchProcessDefinitionVersion(User loginUser, String projectName , int processDefinitionId, long version); + + /** + * check has associated process definition + * + * @param processDefinitionId process definition id + * @param version version + * @return The query result has a specific process definition return true + */ + boolean checkHasAssociatedProcessDefinition(int processDefinitionId, long version); } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java index 97cea0281a..4ab43fb37b 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java @@ -1798,5 +1798,18 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro } } + /** + * check has associated process definition + * + * @param processDefinitionId process definition id + * @param version version + * @return The query result has a specific process definition return true + */ + @Override + public boolean checkHasAssociatedProcessDefinition(int processDefinitionId, long version) { + Integer hasAssociatedDefinitionId = processDefineMapper.queryHasAssociatedDefinitionByIdAndVersion(processDefinitionId, version); + return Objects.nonNull(hasAssociatedDefinitionId); + } + } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java index be7a3e93b0..988ab201fd 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionVersionServiceImpl.java @@ -18,6 +18,7 @@ package org.apache.dolphinscheduler.api.service.impl; import org.apache.dolphinscheduler.api.enums.Status; +import org.apache.dolphinscheduler.api.service.ProcessDefinitionService; import org.apache.dolphinscheduler.api.service.ProcessDefinitionVersionService; import org.apache.dolphinscheduler.api.service.ProjectService; import org.apache.dolphinscheduler.api.utils.PageInfo; @@ -56,6 +57,9 @@ public class ProcessDefinitionVersionServiceImpl extends BaseServiceImpl impleme @Autowired private ProjectMapper projectMapper; + @Autowired + private ProcessDefinitionService processDefinitionService; + /** * add the newest version of one process definition * @@ -178,8 +182,19 @@ public class ProcessDefinitionVersionServiceImpl extends BaseServiceImpl impleme if (resultStatus != Status.SUCCESS) { return checkResult; } + + // check has associated process definition + boolean hasAssociatedProcessDefinition = processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId, version); + if (hasAssociatedProcessDefinition) { + putMsg(result, Status.PROCESS_DEFINITION_VERSION_IS_USED); + return result; + } + processDefinitionVersionMapper.deleteByProcessDefinitionIdAndVersion(processDefinitionId, version); putMsg(result, Status.SUCCESS); return result; } + + + } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java index 1286877dad..f2a0e8deda 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionVersionServiceTest.java @@ -63,6 +63,9 @@ public class ProcessDefinitionVersionServiceTest { @Mock private ProjectServiceImpl projectService; + @Mock + private ProcessDefinitionService processDefinitionService; + @Test public void testAddProcessDefinitionVersion() { long expectedVersion = 5L; @@ -201,6 +204,8 @@ public class ProcessDefinitionVersionServiceTest { .thenReturn(1); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)) .thenReturn(res); + Mockito.when(processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId, version)) + .thenReturn(false); Map resultMap2 = processDefinitionVersionService.deleteByProcessDefinitionIdAndVersion( loginUser @@ -210,6 +215,14 @@ public class ProcessDefinitionVersionServiceTest { Assert.assertEquals(Status.SUCCESS, resultMap2.get(Constants.STATUS)); + Mockito.when(processDefinitionService.checkHasAssociatedProcessDefinition(processDefinitionId, version)) + .thenReturn(true); + Map resultMap3 = processDefinitionVersionService.deleteByProcessDefinitionIdAndVersion( + loginUser + , projectName + , processDefinitionId + , version); + Assert.assertEquals(Status.PROCESS_DEFINITION_VERSION_IS_USED, resultMap3.get(Constants.STATUS)); } /** diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java index 36c988776f..5f5f0f77dd 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java @@ -144,4 +144,12 @@ public interface ProcessDefinitionMapper extends BaseMapper { * @return project ids list */ List listProjectIds(); + + /** + * query has associated definition by id and version + * @param processDefinitionId process definition id + * @param version version + * @return definition id + */ + Integer queryHasAssociatedDefinitionByIdAndVersion(@Param("processDefinitionId") int processDefinitionId, @Param("version") long version); } diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml index a24fd294a7..3abca4367f 100644 --- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml +++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml @@ -139,4 +139,11 @@ set version = #{version} where id = #{processDefinitionId} + + diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue index b3046485a3..9677a1c991 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/versions.vue @@ -50,7 +50,7 @@ :title="$t('Confirm Switch To This Version?')" @onConfirm="_mVersionSwitchProcessDefinitionVersion(scope.row)" > - + @@ -62,7 +62,7 @@ :title="$t('Delete?')" @onConfirm="_mVersionDeleteProcessDefinitionVersion(scope.row,scope.row.id)" > - +