From 56a834b48bb6b2225dff28c5f69a7bac0326c146 Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Thu, 21 Mar 2024 17:07:03 +0800 Subject: [PATCH] [Bug] Disable delete a specific workflow version when exist workflow instance under this version which is not finish (#15730) --- .../ProcessDefinitionController.java | 148 ++++++------- .../api/service/ProcessDefinitionService.java | 151 ++++++------- .../api/service/ProcessInstanceService.java | 76 ++++--- .../impl/ProcessDefinitionServiceImpl.java | 200 +++++++++--------- .../impl/ProcessInstanceServiceImpl.java | 7 + .../ProcessDefinitionControllerTest.java | 18 +- .../common/enums/WorkflowExecutionStatus.java | 15 ++ .../dao/mapper/ProcessInstanceMapper.java | 4 + .../dao/repository/ProcessInstanceDao.java | 10 +- .../impl/ProcessInstanceDaoImpl.java | 12 +- .../dao/mapper/ProcessInstanceMapper.xml | 15 ++ .../impl/ProcessInstanceDaoImplTest.java | 104 +++++++++ 12 files changed, 463 insertions(+), 297 deletions(-) create mode 100644 dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/ProcessInstanceDaoImplTest.java diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java index a7701d25b3..261ea9183b 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java @@ -90,16 +90,16 @@ public class ProcessDefinitionController extends BaseController { /** * create process definition * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param description description - * @param globalParams globalParams - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param description description + * @param globalParams globalParams + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson - * @param otherParamsJson otherParamsJson handle other params + * @param otherParamsJson otherParamsJson handle other params * @return create result code */ @Operation(summary = "createProcessDefinition", description = "CREATE_PROCESS_DEFINITION_NOTES") @@ -132,9 +132,9 @@ public class ProcessDefinitionController extends BaseController { /** * copy process definition * - * @param loginUser login user - * @param projectCode project code - * @param codes process definition codes + * @param loginUser login user + * @param projectCode project code + * @param codes process definition codes * @param targetProjectCode target project code * @return copy result code */ @@ -157,9 +157,9 @@ public class ProcessDefinitionController extends BaseController { /** * move process definition * - * @param loginUser login user - * @param projectCode project code - * @param codes process definition codes + * @param loginUser login user + * @param projectCode project code + * @param codes process definition codes * @param targetProjectCode target project code * @return move result code */ @@ -182,9 +182,9 @@ public class ProcessDefinitionController extends BaseController { /** * verify process definition name unique * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param name name + * @param name name * @return true if process definition name not exists, otherwise false */ @Operation(summary = "verify-name", description = "VERIFY_PROCESS_DEFINITION_NAME_NOTES") @@ -207,17 +207,17 @@ public class ProcessDefinitionController extends BaseController { /** * update process definition, with whole process definition object including task definition, task relation and location. * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param code process definition code - * @param description description - * @param globalParams globalParams - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param code process definition code + * @param description description + * @param globalParams globalParams + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson - * @param otherParamsJson otherParamsJson handle other params + * @param otherParamsJson otherParamsJson handle other params * @return update result code */ @Operation(summary = "update", description = "UPDATE_PROCESS_DEFINITION_NOTES") @@ -263,11 +263,11 @@ public class ProcessDefinitionController extends BaseController { /** * query process definition version paging list info * - * @param loginUser login user info + * @param loginUser login user info * @param projectCode project code - * @param pageNo the process definition version list current page number - * @param pageSize the process definition version list page size - * @param code the process definition code + * @param pageNo the process definition version list current page number + * @param pageSize the process definition version list page size + * @param code the process definition code * @return the process definition version list */ @Operation(summary = "queryVersions", description = "QUERY_PROCESS_DEFINITION_VERSIONS_NOTES") @@ -293,10 +293,10 @@ public class ProcessDefinitionController extends BaseController { /** * switch certain process definition version * - * @param loginUser login user info + * @param loginUser login user info * @param projectCode project code - * @param code the process definition code - * @param version the version user want to switch + * @param code the process definition code + * @param version the version user want to switch * @return switch version result code */ @Operation(summary = "switchVersion", description = "SWITCH_PROCESS_DEFINITION_VERSION_NOTES") @@ -319,10 +319,10 @@ public class ProcessDefinitionController extends BaseController { /** * delete the certain process definition version by version and process definition code * - * @param loginUser login user info + * @param loginUser login user info * @param projectCode project code - * @param code the process definition code - * @param version the process definition version user want to delete + * @param code the process definition code + * @param version the process definition version user want to delete * @return delete version result code */ @Operation(summary = "deleteVersion", description = "DELETE_PROCESS_DEFINITION_VERSION_NOTES") @@ -333,13 +333,13 @@ public class ProcessDefinitionController extends BaseController { @DeleteMapping(value = "/{code}/versions/{version}") @ResponseStatus(HttpStatus.OK) @ApiException(DELETE_PROCESS_DEFINITION_VERSION_ERROR) - public Result deleteProcessDefinitionVersion(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode, - @PathVariable(value = "code") long code, - @PathVariable(value = "version") int version) { - Map result = - processDefinitionService.deleteProcessDefinitionVersion(loginUser, projectCode, code, version); - return returnDataList(result); + public Result deleteProcessDefinitionVersion(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, + @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode, + @PathVariable(value = "code") long workflowDefinitionCode, + @PathVariable(value = "version") int workflowDefinitionVersion) { + processDefinitionService.deleteProcessDefinitionVersion(loginUser, projectCode, workflowDefinitionCode, + workflowDefinitionVersion); + return Result.success(); } @Operation(summary = "release", description = "RELEASE_PROCESS_DEFINITION_NOTES") @@ -372,9 +372,9 @@ public class ProcessDefinitionController extends BaseController { /** * query detail of process definition by code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return process definition detail */ @Operation(summary = "queryProcessDefinitionByCode", description = "QUERY_PROCESS_DEFINITION_BY_CODE_NOTES") @@ -395,9 +395,9 @@ public class ProcessDefinitionController extends BaseController { /** * query detail of process definition by name * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param name process definition name + * @param name process definition name * @return process definition detail */ @Operation(summary = "queryProcessDefinitionByName", description = "QUERY_PROCESS_DEFINITION_BY_NAME_NOTES") @@ -418,7 +418,7 @@ public class ProcessDefinitionController extends BaseController { /** * query Process definition list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return process definition list */ @@ -435,7 +435,7 @@ public class ProcessDefinitionController extends BaseController { /** * query Process definition simple list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return process definition list */ @@ -452,13 +452,13 @@ public class ProcessDefinitionController extends BaseController { /** * query process definition list paging * - * @param loginUser login user - * @param projectCode project code - * @param searchVal search value + * @param loginUser login user + * @param projectCode project code + * @param searchVal search value * @param otherParamsJson otherParamsJson handle other params - * @param pageNo page number - * @param pageSize page size - * @param userId user id + * @param pageNo page number + * @param pageSize page size + * @param userId user id * @return process definition page */ @Operation(summary = "queryListPaging", description = "QUERY_PROCESS_DEFINITION_LIST_PAGING_NOTES") @@ -493,10 +493,10 @@ public class ProcessDefinitionController extends BaseController { /** * encapsulation tree view structure * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code - * @param limit limit + * @param code process definition code + * @param limit limit * @return tree view json data */ @Operation(summary = "viewTree", description = "VIEW_TREE_NOTES") @@ -518,9 +518,9 @@ public class ProcessDefinitionController extends BaseController { /** * get tasks list by process definition code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return task list */ @Operation(summary = "getTasksByDefinitionCode", description = "GET_TASK_LIST_BY_DEFINITION_CODE_NOTES") @@ -541,9 +541,9 @@ public class ProcessDefinitionController extends BaseController { /** * get tasks list map by process definition multiple code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param codes process definition codes + * @param codes process definition codes * @return node list data */ @Operation(summary = "getTaskListByDefinitionCodes", description = "GET_TASK_LIST_BY_DEFINITION_CODE_NOTES") @@ -564,7 +564,7 @@ public class ProcessDefinitionController extends BaseController { /** * get process definition list map by project code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return process definition list data */ @@ -584,7 +584,7 @@ public class ProcessDefinitionController extends BaseController { /** * get task definition list by process definition code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return process definition list data */ @@ -621,9 +621,9 @@ public class ProcessDefinitionController extends BaseController { /** * batch delete process definition by codes * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param codes process definition code list + * @param codes process definition code list * @return delete result code */ @Operation(summary = "batchDeleteByCodes", description = "BATCH_DELETE_PROCESS_DEFINITION_BY_IDS_NOTES") @@ -645,10 +645,10 @@ public class ProcessDefinitionController extends BaseController { /** * batch export process definition by codes * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param codes process definition codes - * @param response response + * @param codes process definition codes + * @param response response */ @Operation(summary = "batchExportByCodes", description = "BATCH_EXPORT_PROCESS_DEFINITION_BY_CODES_NOTES") @Parameters({ @@ -670,7 +670,7 @@ public class ProcessDefinitionController extends BaseController { /** * query all process definition by project code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return process definition list */ @@ -688,9 +688,9 @@ public class ProcessDefinitionController extends BaseController { /** * import process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param file resource file + * @param file resource file * @return import result code */ @Operation(summary = "importProcessDefinition", description = "IMPORT_PROCESS_DEFINITION_NOTES") @@ -715,7 +715,7 @@ public class ProcessDefinitionController extends BaseController { * query process definition global variables and local variables * * @param loginUser login user - * @param code process definition code + * @param code process definition code * @return variables data */ @Operation(summary = "viewVariables", description = "QUERY_PROCESS_DEFINITION_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES") 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 cf28e465ef..52a95839ba 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 @@ -43,16 +43,16 @@ public interface ProcessDefinitionService { /** * create process definition * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param description description - * @param globalParams global params - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param description description + * @param globalParams global params + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson - * @param otherParamsJson otherParamsJson handle other params + * @param otherParamsJson otherParamsJson handle other params * @return create result code */ Map createProcessDefinition(User loginUser, @@ -70,7 +70,7 @@ public interface ProcessDefinitionService { /** * create process definition V2 * - * @param loginUser login user + * @param loginUser login user * @param workflowCreateRequest the new workflow object will be created * @return New ProcessDefinition object created just now */ @@ -79,7 +79,7 @@ public interface ProcessDefinitionService { /** * query process definition list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return definition list */ @@ -89,7 +89,7 @@ public interface ProcessDefinitionService { /** * query process definition simple list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return definition simple list */ @@ -99,13 +99,13 @@ public interface ProcessDefinitionService { /** * query process definition list paging * - * @param loginUser login user - * @param projectCode project code - * @param searchVal search value + * @param loginUser login user + * @param projectCode project code + * @param searchVal search value * @param otherParamsJson otherParamsJson handle other params - * @param pageNo page number - * @param pageSize page size - * @param userId user id + * @param pageNo page number + * @param pageSize page size + * @param userId user id * @return process definition page */ PageInfo queryProcessDefinitionListPaging(User loginUser, @@ -119,7 +119,7 @@ public interface ProcessDefinitionService { /** * Filter resource process definitions * - * @param loginUser login user + * @param loginUser login user * @param workflowFilterRequest workflow filter requests * @return List process definition */ @@ -129,9 +129,9 @@ public interface ProcessDefinitionService { /** * query detail of process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return process definition detail */ @@ -150,6 +150,7 @@ public interface ProcessDefinitionService { long code); Optional queryWorkflowDefinition(long workflowDefinitionCode, int workflowDefinitionVersion); + ProcessDefinition queryWorkflowDefinitionThrowExceptionIfNotFound(long workflowDefinitionCode, int workflowDefinitionVersion); @@ -169,9 +170,9 @@ public interface ProcessDefinitionService { /** * batch copy process definition * - * @param loginUser loginUser - * @param projectCode projectCode - * @param codes processDefinitionCodes + * @param loginUser loginUser + * @param projectCode projectCode + * @param codes processDefinitionCodes * @param targetProjectCode targetProjectCode */ Map batchCopyProcessDefinition(User loginUser, @@ -182,9 +183,9 @@ public interface ProcessDefinitionService { /** * batch move process definition * - * @param loginUser loginUser - * @param projectCode projectCode - * @param codes processDefinitionCodes + * @param loginUser loginUser + * @param projectCode projectCode + * @param codes processDefinitionCodes * @param targetProjectCode targetProjectCode */ Map batchMoveProcessDefinition(User loginUser, @@ -195,15 +196,15 @@ public interface ProcessDefinitionService { /** * update process definition, with whole process definition object including task definition, task relation and location. * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param code process definition code - * @param description description - * @param globalParams global params - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param code process definition code + * @param description description + * @param globalParams global params + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson * @return update result code */ @@ -222,9 +223,9 @@ public interface ProcessDefinitionService { /** * verify process definition name unique * - * @param loginUser login user - * @param projectCode project code - * @param name name + * @param loginUser login user + * @param projectCode project code + * @param name name * @param processDefinitionCode processDefinitionCode * @return true if process definition name not exists, otherwise false */ @@ -236,9 +237,9 @@ public interface ProcessDefinitionService { /** * batch delete process definition by code * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param codes process definition codes + * @param codes process definition codes * @return delete result code */ Map batchDeleteProcessDefinitionByCodes(User loginUser, @@ -250,10 +251,10 @@ public interface ProcessDefinitionService { /** * batch export process definition by codes * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param codes process definition codes - * @param response http servlet response + * @param codes process definition codes + * @param response http servlet response */ void batchExportProcessDefinitionByCodes(User loginUser, long projectCode, @@ -263,9 +264,9 @@ public interface ProcessDefinitionService { /** * import process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param file process metadata json file + * @param file process metadata json file * @return import process */ Map importProcessDefinition(User loginUser, @@ -275,9 +276,9 @@ public interface ProcessDefinitionService { /** * import sql process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param file sql file, zip + * @param file sql file, zip * @return import process */ Map importSqlProcessDefinition(User loginUser, @@ -296,9 +297,9 @@ public interface ProcessDefinitionService { /** * get task node details based on process definition * - * @param loginUser loginUser + * @param loginUser loginUser * @param projectCode project code - * @param code processDefinition code + * @param code processDefinition code * @return task node list */ Map getTaskNodeListByDefinitionCode(User loginUser, @@ -308,9 +309,9 @@ public interface ProcessDefinitionService { /** * get task node details map based on process definition * - * @param loginUser loginUser + * @param loginUser loginUser * @param projectCode project code - * @param codes define code list + * @param codes define code list * @return task node list */ Map getNodeListMapByDefinitionCodes(User loginUser, @@ -336,7 +337,7 @@ public interface ProcessDefinitionService { /** * query process definition list by project code * - * @param projectCode project code + * @param projectCode project code * @param processDefinitionCode process definition code * @return process definitions in the project */ @@ -346,8 +347,8 @@ public interface ProcessDefinitionService { * Encapsulates the TreeView structure * * @param projectCode project code - * @param code process definition code - * @param limit limit + * @param code process definition code + * @param limit limit * @return tree view json data */ Map viewTree(User loginUser, long projectCode, long code, Integer limit); @@ -355,10 +356,10 @@ public interface ProcessDefinitionService { /** * switch the defined process definition version * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code - * @param version the version user want to switch + * @param code process definition code + * @param version the version user want to switch * @return switch process definition version result code */ Map switchProcessDefinitionVersion(User loginUser, @@ -369,11 +370,11 @@ public interface ProcessDefinitionService { /** * query the pagination versions info by one certain process definition code * - * @param loginUser login user info to check auth + * @param loginUser login user info to check auth * @param projectCode project code - * @param pageNo page number - * @param pageSize page size - * @param code process definition code + * @param pageNo page number + * @param pageSize page size + * @param code process definition code * @return the pagination process definition versions info of the certain process definition */ Result queryProcessDefinitionVersions(User loginUser, @@ -385,22 +386,21 @@ public interface ProcessDefinitionService { /** * delete one certain process definition by version number and process definition code * - * @param loginUser login user info to check auth - * @param projectCode project code - * @param code process definition code - * @param version version number - * @return delele result code + * @param loginUser login user info to check auth + * @param projectCode project code + * @param workflowDefinitionCode process definition code + * @param workflowDefinitionVersion version number */ - Map deleteProcessDefinitionVersion(User loginUser, - long projectCode, - long code, - int version); + void deleteProcessDefinitionVersion(User loginUser, + long projectCode, + long workflowDefinitionCode, + int workflowDefinitionVersion); /** * update process definition basic info, not including task definition, task relation and location. * - * @param loginUser login user - * @param workflowCode workflow resource code you want to update + * @param loginUser login user + * @param workflowCode workflow resource code you want to update * @param workflowUpdateRequest workflow update requests * @return ProcessDefinition instance */ @@ -420,9 +420,10 @@ public interface ProcessDefinitionService { /** * view process variables - * @param loginUser login user + * + * @param loginUser login user * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return variables data */ Map viewVariables(User loginUser, long projectCode, long code); diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java index ccb3f98b4d..7bf49e0016 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java @@ -49,9 +49,9 @@ public interface ProcessInstanceService { /** * query process instance by id * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param processId process instance id + * @param processId process instance id * @return process instance detail */ Map queryProcessInstanceById(User loginUser, @@ -73,17 +73,17 @@ public interface ProcessInstanceService { /** * paging query process instance list, filtering according to project, process definition, time range, keyword, process status * - * @param loginUser login user - * @param projectCode project code - * @param pageNo page number - * @param pageSize page size + * @param loginUser login user + * @param projectCode project code + * @param pageNo page number + * @param pageSize page size * @param processDefineCode process definition code - * @param searchVal search value - * @param stateType state type - * @param host host - * @param startDate start time - * @param endDate end time - * @param otherParamsJson otherParamsJson handle other params + * @param searchVal search value + * @param stateType state type + * @param host host + * @param startDate start time + * @param endDate end time + * @param otherParamsJson otherParamsJson handle other params * @return process instance list */ Result> queryProcessInstanceList(User loginUser, @@ -102,7 +102,7 @@ public interface ProcessInstanceService { /** * paging query process instance list, filtering according to project, process definition, time range, keyword, process status * - * @param loginUser login user + * @param loginUser login user * @param workflowInstanceQueryRequest workflowInstanceQueryRequest * @return process instance list */ @@ -112,9 +112,9 @@ public interface ProcessInstanceService { /** * query task list by process instance id * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param processId process instance id + * @param processId process instance id * @return task list for the process instance * @throws IOException io exception */ @@ -127,9 +127,9 @@ public interface ProcessInstanceService { /** * query sub process instance detail info by task id * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param taskId task id + * @param taskId task id * @return sub process instance detail */ Map querySubProcessInstanceByTaskId(User loginUser, @@ -142,16 +142,16 @@ public interface ProcessInstanceService { /** * update process instance * - * @param loginUser login user - * @param projectCode project code - * @param taskRelationJson process task relation json + * @param loginUser login user + * @param projectCode project code + * @param taskRelationJson process task relation json * @param taskDefinitionJson taskDefinitionJson - * @param processInstanceId process instance id - * @param scheduleTime schedule time - * @param syncDefine sync define - * @param globalParams global params - * @param locations locations for nodes - * @param timeout timeout + * @param processInstanceId process instance id + * @param scheduleTime schedule time + * @param syncDefine sync define + * @param globalParams global params + * @param locations locations for nodes + * @param timeout timeout * @return update result code */ Map updateProcessInstance(User loginUser, @@ -168,9 +168,9 @@ public interface ProcessInstanceService { /** * query parent process instance detail info by sub process instance id * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param subId sub process id + * @param subId sub process id * @return parent instance detail */ Map queryParentInstanceBySubId(User loginUser, @@ -190,7 +190,7 @@ public interface ProcessInstanceService { /** * view process instance variables * - * @param projectCode project code + * @param projectCode project code * @param processInstanceId process instance id * @return variables data */ @@ -199,7 +199,7 @@ public interface ProcessInstanceService { /** * encapsulation gantt structure * - * @param projectCode project code + * @param projectCode project code * @param processInstanceId process instance id * @return gantt tree data * @throws Exception exception when json parse @@ -210,17 +210,29 @@ public interface ProcessInstanceService { * query process instance by processDefinitionCode and stateArray * * @param processDefinitionCode processDefinitionCode - * @param states states array + * @param states states array * @return process instance list */ List queryByProcessDefineCodeAndStatus(Long processDefinitionCode, int[] states); + /** + * query process instance by processDefinitionCode and stateArray + * + * @param workflowDefinitionCode workflowDefinitionCode + * @param workflowDefinitionVersion workflowDefinitionVersion + * @param states states array + * @return process instance list + */ + List queryByWorkflowCodeVersionStatus(Long workflowDefinitionCode, + int workflowDefinitionVersion, + int[] states); + /** * query process instance by processDefinitionCode * * @param processDefinitionCode processDefinitionCode - * @param size size + * @param size size * @return process instance list */ List queryByProcessDefineCode(Long processDefinitionCode, 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 173268c53a..09fe59e523 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 @@ -70,6 +70,7 @@ import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum; import org.apache.dolphinscheduler.common.enums.ReleaseState; import org.apache.dolphinscheduler.common.enums.TimeoutFlag; import org.apache.dolphinscheduler.common.enums.UserType; +import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus; import org.apache.dolphinscheduler.common.graph.DAG; import org.apache.dolphinscheduler.common.lifecycle.ServerLifeCycleManager; import org.apache.dolphinscheduler.common.model.TaskNodeRelation; @@ -252,14 +253,14 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * create process definition * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param description description - * @param globalParams global params - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param description description + * @param globalParams global params + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson * @return create result code */ @@ -346,7 +347,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * create single process definition * - * @param loginUser login user + * @param loginUser login user * @param workflowCreateRequest the new workflow object will be created * @return New ProcessDefinition object created just now */ @@ -495,7 +496,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query process definition list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return definition list */ @@ -518,7 +519,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query process definition simple list * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code * @return definition simple list */ @@ -549,12 +550,12 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query process definition list paging * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param searchVal search value - * @param userId user id - * @param pageNo page number - * @param pageSize page size + * @param searchVal search value + * @param userId user id + * @param pageNo page number + * @param pageSize page size * @return process definition page */ @Override @@ -604,7 +605,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * Filter resource process definitions * - * @param loginUser login user + * @param loginUser login user * @param workflowFilterRequest workflow filter requests * @return List process definition */ @@ -644,9 +645,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query detail of process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return process definition detail */ @Override @@ -675,7 +676,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro * query detail of process definition * * @param loginUser login user - * @param code process definition code + * @param code process definition code * @return process definition detail */ @Override @@ -736,15 +737,15 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * update process definition * - * @param loginUser login user - * @param projectCode project code - * @param name process definition name - * @param code process definition code - * @param description description - * @param globalParams global params - * @param locations locations for nodes - * @param timeout timeout - * @param taskRelationJson relation json for nodes + * @param loginUser login user + * @param projectCode project code + * @param name process definition name + * @param code process definition code + * @param description description + * @param globalParams global params + * @param locations locations for nodes + * @param timeout timeout + * @param taskRelationJson relation json for nodes * @param taskDefinitionJson taskDefinitionJson * @return update result code */ @@ -817,11 +818,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * Task want to delete whether used in other task, should throw exception when have be used. - * + *

* This function avoid delete task already dependencies by other tasks by accident. * * @param processDefinition ProcessDefinition you change task definition and task relation - * @param taskRelationList All the latest task relation list from process definition + * @param taskRelationList All the latest task relation list from process definition */ private void taskUsedInOtherTaskValid(ProcessDefinition processDefinition, List taskRelationList) { @@ -927,9 +928,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * verify process definition name unique * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param name name + * @param name name * @return true if process definition name not exists, otherwise false */ @Override @@ -999,7 +1000,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * Process definition want to delete whether used in other task, should throw exception when have be used. - * + *

* This function avoid delete process definition already dependencies by other tasks by accident. * * @param processDefinition ProcessDefinition you change task definition and task relation @@ -1166,9 +1167,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * import process definition * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param file process metadata json file + * @param file process metadata json file * @return import process */ @Override @@ -1642,9 +1643,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * get task node details based on process definition * - * @param loginUser loginUser + * @param loginUser loginUser * @param projectCode project code - * @param code process definition code + * @param code process definition code * @return task node list */ @Override @@ -1671,9 +1672,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * get task node details map based on process definition * - * @param loginUser loginUser + * @param loginUser loginUser * @param projectCode project code - * @param codes define codes + * @param codes define codes * @return task node list */ @Override @@ -1724,7 +1725,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query process definition all by project code * - * @param loginUser loginUser + * @param loginUser loginUser * @param projectCode project code * @return process definitions in the project */ @@ -1764,7 +1765,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query process definition list by process definition code * - * @param projectCode project code + * @param projectCode project code * @param processDefinitionCode process definition code * @return task definition list in the process definition */ @@ -1800,8 +1801,8 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro * Encapsulates the TreeView structure * * @param projectCode project code - * @param code process definition code - * @param limit limit + * @param code process definition code + * @param limit limit * @return tree view json data */ @Override @@ -1963,9 +1964,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * batch copy process definition * - * @param loginUser loginUser - * @param projectCode projectCode - * @param codes processDefinitionCodes + * @param loginUser loginUser + * @param projectCode projectCode + * @param codes processDefinitionCodes * @param targetProjectCode targetProjectCode */ @Override @@ -1987,9 +1988,10 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * batch move process definition * Will be deleted - * @param loginUser loginUser - * @param projectCode projectCode - * @param codes processDefinitionCodes + * + * @param loginUser loginUser + * @param projectCode projectCode + * @param codes processDefinitionCodes * @param targetProjectCode targetProjectCode */ @Override @@ -2160,8 +2162,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * get new Task name or Process name when copy or import operate + * * @param originalName Task or Process original name - * @param suffix "_copy_" or "_import_" + * @param suffix "_copy_" or "_import_" * @return new name */ public String getNewName(String originalName, String suffix) { @@ -2183,10 +2186,10 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * switch the defined process definition version * - * @param loginUser login user + * @param loginUser login user * @param projectCode project code - * @param code process definition code - * @param version the version user want to switch + * @param code process definition code + * @param version the version user want to switch * @return switch process definition version result code */ @Override @@ -2237,11 +2240,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * check batch operate result * - * @param srcProjectCode srcProjectCode + * @param srcProjectCode srcProjectCode * @param targetProjectCode targetProjectCode - * @param result result + * @param result result * @param failedProcessList failedProcessList - * @param isCopy isCopy + * @param isCopy isCopy */ private void checkBatchOperateResult(long srcProjectCode, long targetProjectCode, Map result, List failedProcessList, boolean isCopy) { @@ -2268,11 +2271,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * query the pagination versions info by one certain process definition code * - * @param loginUser login user info to check auth + * @param loginUser login user info to check auth * @param projectCode project code - * @param pageNo page number - * @param pageSize page size - * @param code process definition code + * @param pageNo page number + * @param pageSize page size + * @param code process definition code * @return the pagination process definition versions info of the certain process definition */ @Override @@ -2304,52 +2307,42 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * delete one certain process definition by version number and process definition code * - * @param loginUser login user info to check auth + * @param loginUser login user info to check auth * @param projectCode project code - * @param code process definition code - * @param version version number - * @return delete result code + * @param code process definition code + * @param version version number */ @Override @Transactional - public Map deleteProcessDefinitionVersion(User loginUser, long projectCode, long code, - int version) { - Project project = projectMapper.queryByCode(projectCode); - // check if user have write perm for project - Map result = new HashMap<>(); - boolean hasProjectAndWritePerm = projectService.hasProjectAndWritePerm(loginUser, project, result); - if (!hasProjectAndWritePerm) { - return result; - } + public void deleteProcessDefinitionVersion(User loginUser, + long projectCode, + long code, + int version) { + projectService.checkHasProjectWritePermissionThrowException(loginUser, projectCode); ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(code); - if (processDefinition == null || projectCode != processDefinition.getProjectCode()) { - log.error("Process definition does not exist, code:{}.", code); - putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, String.valueOf(code)); - } else { - if (processDefinition.getVersion() == version) { - log.warn( - "Process definition can not be deleted due to version is being used, projectCode:{}, processDefinitionCode:{}, version:{}.", - projectCode, code, version); - putMsg(result, Status.MAIN_TABLE_USING_VERSION); - return result; - } - int deleteLog = processDefinitionLogMapper.deleteByProcessDefinitionCodeAndVersion(code, version); - int deleteRelationLog = processTaskRelationLogMapper.deleteByCode(code, version); - if (deleteLog == 0 || deleteRelationLog == 0) { - log.error( - "Delete process definition version error, projectCode:{}, processDefinitionCode:{}, version:{}.", - projectCode, code, version); - putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR); - throw new ServiceException(Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR); - } - log.info( - "Delete process definition version complete, projectCode:{}, processDefinitionCode:{}, version:{}.", - projectCode, code, version); - putMsg(result, Status.SUCCESS); + throw new ServiceException(Status.PROCESS_DEFINE_NOT_EXIST, code); } - return result; + if (processDefinition.getVersion() == version) { + log.warn("This version: {} of workflow: {} is the main version cannot delete by version", code, version); + throw new ServiceException(Status.MAIN_TABLE_USING_VERSION); + } + // check whether there exist running workflow instance under the process definition + List workflowInstances = processInstanceService.queryByWorkflowCodeVersionStatus( + code, + version, + WorkflowExecutionStatus.getNotTerminalStatus()); + if (CollectionUtils.isNotEmpty(workflowInstances)) { + throw new ServiceException(Status.DELETE_PROCESS_DEFINITION_EXECUTING_FAIL, workflowInstances.size()); + } + + int deleteLog = processDefinitionLogMapper.deleteByProcessDefinitionCodeAndVersion(code, version); + int deleteRelationLog = processTaskRelationLogMapper.deleteByCode(code, version); + if (deleteLog == 0 || deleteRelationLog == 0) { + throw new ServiceException(Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR); + } + log.info("Delete version: {} of workflow: {}, projectCode:{}.", version, code, projectCode); } private void updateWorkflowValid(User user, ProcessDefinition oldProcessDefinition, @@ -2380,9 +2373,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * update single resource workflow * - * @param loginUser login user - * @param workflowCode workflow resource code want to update - * @param workflowUpdateRequest workflow update resource object + * @param loginUser login user + * @param workflowCode workflow resource code want to update + * @param workflowUpdateRequest workflow update resource object * @return Process definition */ @Override @@ -2546,7 +2539,8 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro /** * view process variables - * @param loginUser login user + * + * @param loginUser login user * @param projectCode project code * @param code process definition code * @return variables data diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java index 899f578e57..36cc986607 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java @@ -1064,6 +1064,13 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl implements Proce return processInstanceMapper.queryByProcessDefineCodeAndStatus(processDefinitionCode, states); } + @Override + public List queryByWorkflowCodeVersionStatus(Long workflowDefinitionCode, + int workflowDefinitionVersion, int[] states) { + return processInstanceDao.queryByWorkflowCodeVersionStatus(workflowDefinitionCode, workflowDefinitionVersion, + states); + } + /** * query process instance by processDefinitionCode * diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java index e9538667d0..91578c974b 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java @@ -17,6 +17,8 @@ package org.apache.dolphinscheduler.api.controller; +import static org.mockito.Mockito.doNothing; + import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.api.service.impl.ProcessDefinitionServiceImpl; import org.apache.dolphinscheduler.api.utils.PageInfo; @@ -183,7 +185,7 @@ public class ProcessDefinitionControllerTest { Map result = new HashMap<>(); putMsg(result, Status.SUCCESS); - Mockito.doNothing().when(processDefinitionService) + doNothing().when(processDefinitionService) .offlineWorkflowDefinition(user, projectCode, id); Result response = processDefinitionController.releaseProcessDefinition(user, projectCode, id, ReleaseState.OFFLINE); @@ -383,7 +385,7 @@ public class ProcessDefinitionControllerTest { String processDefinitionIds = "1,2"; long projectCode = 1L; HttpServletResponse response = new MockHttpServletResponse(); - Mockito.doNothing().when(this.processDefinitionService).batchExportProcessDefinitionByCodes(user, projectCode, + doNothing().when(this.processDefinitionService).batchExportProcessDefinitionByCodes(user, projectCode, processDefinitionIds, response); processDefinitionController.batchExportProcessDefinitionByCodes(user, projectCode, processDefinitionIds, response); @@ -420,13 +422,11 @@ public class ProcessDefinitionControllerTest { @Test public void testDeleteProcessDefinitionVersion() { long projectCode = 1L; - Map resultMap = new HashMap<>(); - putMsg(resultMap, Status.SUCCESS); - Mockito.when(processDefinitionService.deleteProcessDefinitionVersion( - user, projectCode, 1, 10)).thenReturn(resultMap); - Result result = processDefinitionController.deleteProcessDefinitionVersion( - user, projectCode, 1, 10); - Assertions.assertEquals(Status.SUCCESS.getCode(), (int) result.getCode()); + long workflowCode = 1L; + int workflowVersion = 10; + doNothing().when(processDefinitionService).deleteProcessDefinitionVersion(user, projectCode, workflowCode, + workflowVersion); + processDefinitionController.deleteProcessDefinitionVersion(user, projectCode, workflowCode, workflowVersion); } @Test diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java index e8ec2dbc08..880db60257 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/WorkflowExecutionStatus.java @@ -52,6 +52,17 @@ public enum WorkflowExecutionStatus { READY_STOP.getCode() }; + private static final int[] NOT_TERMINAL_STATUS = new int[]{ + SUBMITTED_SUCCESS.getCode(), + RUNNING_EXECUTION.getCode(), + DELAY_EXECUTION.getCode(), + READY_PAUSE.getCode(), + READY_STOP.getCode(), + SERIAL_WAIT.getCode(), + READY_BLOCK.getCode(), + WAIT_TO_RUN.getCode() + }; + static { for (WorkflowExecutionStatus executionStatus : WorkflowExecutionStatus.values()) { CODE_MAP.put(executionStatus.getCode(), executionStatus); @@ -116,6 +127,10 @@ public enum WorkflowExecutionStatus { return NEED_FAILOVER_STATES; } + public static int[] getNotTerminalStatus() { + return NOT_TERMINAL_STATUS; + } + @EnumValue private final int code; diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.java index a0a81374f5..20c259da9b 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.java @@ -259,6 +259,10 @@ public interface ProcessInstanceMapper extends BaseMapper { List queryByProcessDefineCodeAndStatus(@Param("processDefinitionCode") Long processDefinitionCode, @Param("states") int[] states); + List queryByWorkflowCodeVersionStatus(@Param("workflowDefinitionCode") long workflowDefinitionCode, + @Param("workflowDefinitionVersion") int workflowDefinitionVersion, + @Param("states") int[] states); + List queryByProcessDefineCodeAndProcessDefinitionVersionAndStatusAndNextId(@Param("processDefinitionCode") Long processDefinitionCode, @Param("processDefinitionVersion") int processDefinitionVersion, @Param("states") int[] states, diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/ProcessInstanceDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/ProcessInstanceDao.java index c1bceab120..02703fe0f3 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/ProcessInstanceDao.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/ProcessInstanceDao.java @@ -20,7 +20,7 @@ package org.apache.dolphinscheduler.dao.repository; import org.apache.dolphinscheduler.dao.entity.ProcessInstance; import org.apache.dolphinscheduler.plugin.task.api.model.DateInterval; -import org.apache.ibatis.annotations.Param; +import java.util.List; public interface ProcessInstanceDao extends IDao { @@ -64,7 +64,7 @@ public interface ProcessInstanceDao extends IDao { * @param definitionCode definitionCode * @return process instance */ - ProcessInstance queryFirstScheduleProcessInstance(@Param("processDefinitionCode") Long definitionCode); + ProcessInstance queryFirstScheduleProcessInstance(Long definitionCode); /** * query first manual process instance @@ -72,7 +72,11 @@ public interface ProcessInstanceDao extends IDao { * @param definitionCode definitionCode * @return process instance */ - ProcessInstance queryFirstStartProcessInstance(@Param("processDefinitionCode") Long definitionCode); + ProcessInstance queryFirstStartProcessInstance(Long definitionCode); ProcessInstance querySubProcessInstanceByParentId(Integer processInstanceId, Integer taskInstanceId); + + List queryByWorkflowCodeVersionStatus(Long workflowDefinitionCode, + int workflowDefinitionVersion, + int[] states); } diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/ProcessInstanceDaoImpl.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/ProcessInstanceDaoImpl.java index a5562f7a91..8ff93b3a9f 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/ProcessInstanceDaoImpl.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/ProcessInstanceDaoImpl.java @@ -25,6 +25,8 @@ import org.apache.dolphinscheduler.dao.repository.BaseDao; import org.apache.dolphinscheduler.dao.repository.ProcessInstanceDao; import org.apache.dolphinscheduler.plugin.task.api.model.DateInterval; +import java.util.List; + import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -82,7 +84,7 @@ public class ProcessInstanceDaoImpl extends BaseDao queryByWorkflowCodeVersionStatus(Long workflowDefinitionCode, + int workflowDefinitionVersion, + int[] states) { + return mybatisMapper.queryByWorkflowCodeVersionStatus(workflowDefinitionCode, workflowDefinitionVersion, + states); + } } diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.xml index baeb5f90a7..095e266ed5 100644 --- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.xml +++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.xml @@ -259,6 +259,21 @@ order by id asc + + +