From a7c8d4d5ce759f810a941e1d29101692019f0100 Mon Sep 17 00:00:00 2001 From: xiangzihao <460888207@qq.com> Date: Thu, 1 Aug 2024 09:37:55 +0800 Subject: [PATCH] [DSIP-59] remove single task definition code and ui (#16397) * dsip 59 * fix e2e test --- docs/docs/en/guide/project/task-definition.md | 25 -- docs/docs/zh/guide/project/task-definition.md | 22 -- .../dev/project/batch-task-definition.png | Bin 72426 -> 0 bytes .../dev/project/stream-task-definition.png | Bin 44125 -> 0 bytes .../dev/project/stream-task-execute.png | Bin 66638 -> 0 bytes .../controller/TaskDefinitionController.java | 154 -------- .../v2/TaskDefinitionV2Controller.java | 66 ---- .../api/service/TaskDefinitionService.java | 97 ----- .../impl/TaskDefinitionServiceImpl.java | 371 ------------------ .../TaskDefinitionServiceImplTest.java | 279 ------------- .../dao/mapper/TaskDefinitionMapper.java | 17 - .../dao/mapper/TaskDefinitionMapper.xml | 15 - .../e2e/pages/project/ProjectDetailPage.java | 2 +- .../src/layouts/content/use-dataList.ts | 5 - dolphinscheduler-ui/src/locales/en_US/menu.ts | 1 - dolphinscheduler-ui/src/locales/zh_CN/menu.ts | 1 - .../src/router/modules/projects.ts | 11 - .../service/modules/task-definition/index.ts | 134 +------ .../service/modules/task-definition/types.ts | 135 +------ .../projects/task/definition/batch-task.tsx | 229 ----------- .../definition/components/start-modal.tsx | 272 ------------- .../task/definition/components/use-start.tsx | 156 -------- .../task/definition/components/use-version.ts | 213 ---------- .../definition/components/version-modal.tsx | 109 ----- .../views/projects/task/definition/index.tsx | 41 -- .../projects/task/definition/stream-task.tsx | 152 ------- .../views/projects/task/definition/types.ts | 40 -- .../task/definition/use-stream-table.ts | 202 ---------- .../projects/task/definition/use-table.ts | 348 ---------------- .../projects/task/definition/use-task.ts | 140 ------- 30 files changed, 3 insertions(+), 3234 deletions(-) delete mode 100644 docs/docs/en/guide/project/task-definition.md delete mode 100644 docs/docs/zh/guide/project/task-definition.md delete mode 100644 docs/img/new_ui/dev/project/batch-task-definition.png delete mode 100644 docs/img/new_ui/dev/project/stream-task-definition.png delete mode 100644 docs/img/new_ui/dev/project/stream-task-execute.png delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/batch-task.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/components/start-modal.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/components/use-start.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/components/use-version.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/components/version-modal.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/index.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/stream-task.tsx delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/types.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/use-stream-table.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/use-table.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/definition/use-task.ts diff --git a/docs/docs/en/guide/project/task-definition.md b/docs/docs/en/guide/project/task-definition.md deleted file mode 100644 index a48cc1a848..0000000000 --- a/docs/docs/en/guide/project/task-definition.md +++ /dev/null @@ -1,25 +0,0 @@ -# Task Definition - -## Batch Task Definition - -Task definition allows to modify or operate tasks at the task level rather than modifying them in the workflow definition. -We already have workflow level task editor in [workflow definition](workflow-definition.md) which you can click the specific -workflow and then edit its task definition. It is depressing when you want to edit the task definition but do not remember -which workflow it belongs to. So we decide to add `Task Definition` view under `Task` menu. - -![task-definition](../../../../img/new_ui/dev/project/batch-task-definition.png) - -In this view, you can create, query, update, delete task definition by click the related button in `operation` column. The -most exciting thing is you could query task by task name in the wildcard, and it is useful when you only remember the task -name but forget which workflow it belongs to. It is also supported query by the task name alone with `Task Type` or -`Workflow Name` - -## Stream Task Definition - -Stream task definitions are created in the workflow definition, and can be modified and executed. - -![task-definition](../../../../img/new_ui/dev/project/stream-task-definition.png) - -Click the execute button, check the execution parameters and click Confirm to submit the stream task. - -![task-definition](../../../../img/new_ui/dev/project/stream-task-execute.png) diff --git a/docs/docs/zh/guide/project/task-definition.md b/docs/docs/zh/guide/project/task-definition.md deleted file mode 100644 index c6247d489c..0000000000 --- a/docs/docs/zh/guide/project/task-definition.md +++ /dev/null @@ -1,22 +0,0 @@ -# 任务定义 - -## 批量任务定义 - -批量任务定义允许您在基于任务级别而不是在工作流中操作修改任务。再此之前,我们已经有了工作流级别的任务编辑器,你可以在[工作流定义](workflow-definition.md) -单击特定的工作流,然后编辑任务的定义。当您想编辑特定的任务定义但不记得它属于哪个工作流时,这是令人沮丧的。所以我们决定在 `任务` 菜单下添加 `任务定义` 视图。 - -![task-definition](../../../../img/new_ui/dev/project/batch-task-definition.png) - -在该视图中,您可以通过单击 `操作` 列中的相关按钮来进行创建、查询、更新、删除任务定义。最令人兴奋的是您可以通过通配符进行全部任务查询,当您只 -记得任务名称但忘记它属于哪个工作流时是非常有用的。也支持通过任务名称结合使用 `任务类型` 或 `工作流程名称` 进行查询。 - -## 实时任务定义 - -实时任务定义在工作流定义中创建,在任务定义页面可以进行修改和执行。 - -![task-definition](../../../../img/new_ui/dev/project/stream-task-definition.png) - -点击实时任务执行,检查执行参数后点击确认,即可提交实时任务。 - -![task-definition](../../../../img/new_ui/dev/project/stream-task-execute.png) - diff --git a/docs/img/new_ui/dev/project/batch-task-definition.png b/docs/img/new_ui/dev/project/batch-task-definition.png deleted file mode 100644 index ca1608477e45172f43f5a12bb11ad0c390141869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72426 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

6?Mj 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 HB{Ts5Fy&zi diff --git a/docs/img/new_ui/dev/project/stream-task-definition.png b/docs/img/new_ui/dev/project/stream-task-definition.png deleted file mode 100644 index b6c0629a453474b24e66e7298748487542f235d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44125 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 diff --git a/docs/img/new_ui/dev/project/stream-task-execute.png b/docs/img/new_ui/dev/project/stream-task-execute.png deleted file mode 100644 index 2b49cd8df7fe6ecec82c654d9ec1b53b0499f931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66638 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 diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java index fc819c284d..66f1271db4 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java @@ -17,12 +17,9 @@ package org.apache.dolphinscheduler.api.controller; -import static org.apache.dolphinscheduler.api.enums.Status.CREATE_TASK_DEFINITION_ERROR; -import static org.apache.dolphinscheduler.api.enums.Status.DELETE_TASK_DEFINE_BY_CODE_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.DELETE_TASK_DEFINITION_VERSION_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_DETAIL_OF_TASK_DEFINITION_ERROR; -import static org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_DEFINITION_LIST_PAGING_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_DEFINITION_VERSIONS_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.RELEASE_TASK_DEFINITION_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.SWITCH_TASK_DEFINITION_VERSION_ERROR; @@ -30,17 +27,12 @@ import static org.apache.dolphinscheduler.api.enums.Status.UPDATE_TASK_DEFINITIO import org.apache.dolphinscheduler.api.audit.OperatorLog; import org.apache.dolphinscheduler.api.audit.enums.AuditType; -import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.api.exceptions.ApiException; import org.apache.dolphinscheduler.api.service.TaskDefinitionService; import org.apache.dolphinscheduler.api.utils.Result; import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.common.enums.ReleaseState; -import org.apache.dolphinscheduler.common.enums.TaskExecuteType; import org.apache.dolphinscheduler.dao.entity.User; -import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils; - -import org.apache.commons.lang3.StringUtils; import java.util.Map; @@ -74,90 +66,6 @@ public class TaskDefinitionController extends BaseController { @Autowired private TaskDefinitionService taskDefinitionService; - /** - * create task definition - * - * @param loginUser login user - * @param projectCode project code - * @param taskDefinitionJson task definition json - * @return create result code - */ - @Operation(summary = "save", description = "CREATE_TASK_DEFINITION_NOTES") - @Parameters({ - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true, schema = @Schema(implementation = long.class)), - @Parameter(name = "taskDefinitionJson", description = "TASK_DEFINITION_JSON", required = true, schema = @Schema(implementation = String.class)) - }) - @PostMapping() - @ResponseStatus(HttpStatus.CREATED) - @ApiException(CREATE_TASK_DEFINITION_ERROR) - @OperatorLog(auditType = AuditType.TASK_CREATE) - public Result createTaskDefinition(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode, - @RequestParam(value = "taskDefinitionJson", required = true) String taskDefinitionJson) { - Map result = - taskDefinitionService.createTaskDefinition(loginUser, projectCode, taskDefinitionJson); - return returnDataList(result); - } - - /** - * create single task definition that binds the workflow - * - * @param loginUser login user - * @param projectCode project code - * @param processDefinitionCode process definition code - * @param taskDefinitionJsonObj task definition json object - * @param upstreamCodes upstream task codes, sep comma - * @return create result code - */ - @Operation(summary = "saveSingle", description = "CREATE_SINGLE_TASK_DEFINITION_NOTES") - @Parameters({ - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true, schema = @Schema(implementation = long.class)), - @Parameter(name = "processDefinitionCode", description = "PROCESS_DEFINITION_CODE", required = true, schema = @Schema(implementation = long.class)), - @Parameter(name = "taskDefinitionJsonObj", description = "TASK_DEFINITION_JSON", required = true, schema = @Schema(implementation = String.class)), - @Parameter(name = "upstreamCodes", description = "UPSTREAM_CODES", required = false, schema = @Schema(implementation = String.class)) - }) - @PostMapping("/save-single") - @ResponseStatus(HttpStatus.CREATED) - @ApiException(CREATE_TASK_DEFINITION_ERROR) - @OperatorLog(auditType = AuditType.TASK_CREATE) - public Result createTaskBindsWorkFlow(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode, - @RequestParam(value = "processDefinitionCode", required = true) long processDefinitionCode, - @RequestParam(value = "taskDefinitionJsonObj", required = true) String taskDefinitionJsonObj, - @RequestParam(value = "upstreamCodes", required = false) String upstreamCodes) { - Map result = taskDefinitionService.createTaskBindsWorkFlow(loginUser, projectCode, - processDefinitionCode, taskDefinitionJsonObj, StringUtils.defaultString(upstreamCodes)); - return returnDataList(result); - } - - /** - * update task definition - * - * @param loginUser login user - * @param projectCode project code - * @param code task definition code - * @param taskDefinitionJsonObj task definition json object - * @return update result code - */ - @Operation(summary = "update", description = "UPDATE_TASK_DEFINITION_NOTES") - @Parameters({ - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true, schema = @Schema(implementation = long.class)), - @Parameter(name = "code", description = "TASK_DEFINITION_CODE", required = true, schema = @Schema(implementation = long.class, example = "1")), - @Parameter(name = "taskDefinitionJsonObj", description = "TASK_DEFINITION_JSON", required = true, schema = @Schema(implementation = String.class)) - }) - @PutMapping(value = "/{code}") - @ResponseStatus(HttpStatus.OK) - @ApiException(UPDATE_TASK_DEFINITION_ERROR) - @OperatorLog(auditType = AuditType.TASK_UPDATE) - public Result updateTaskDefinition(@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, - @RequestParam(value = "taskDefinitionJsonObj", required = true) String taskDefinitionJsonObj) { - Map result = - taskDefinitionService.updateTaskDefinition(loginUser, projectCode, code, taskDefinitionJsonObj); - return returnDataList(result); - } - /** * update task definition * @@ -271,29 +179,6 @@ public class TaskDefinitionController extends BaseController { return returnDataList(result); } - /** - * delete task definition by code - * - * @param loginUser login user - * @param projectCode project code - * @param code the task definition code - * @return delete result code - */ - @Operation(summary = "deleteTaskDefinition", description = "DELETE_TASK_DEFINITION_BY_CODE_NOTES") - @Parameters({ - @Parameter(name = "code", description = "TASK_DEFINITION_CODE", required = true, schema = @Schema(implementation = long.class, example = "1")) - }) - @DeleteMapping(value = "/{code}") - @ResponseStatus(HttpStatus.OK) - @ApiException(DELETE_TASK_DEFINE_BY_CODE_ERROR) - @OperatorLog(auditType = AuditType.TASK_DELETE) - public Result deleteTaskDefinitionByCode(@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) { - taskDefinitionService.deleteTaskDefinitionByCode(loginUser, code); - return new Result(Status.SUCCESS); - } - /** * query detail of task definition by code * @@ -316,45 +201,6 @@ public class TaskDefinitionController extends BaseController { return returnDataList(result); } - /** - * query task definition list paging - * - * @param loginUser login user - * @param projectCode project code - * @param searchWorkflowName searchWorkflowName - * @param searchTaskName searchTaskName - * @param taskType taskType - * @param taskExecuteType taskExecuteType - * @param pageNo page number - * @param pageSize page size - * @return task definition page - */ - @Operation(summary = "queryTaskDefinitionListPaging", description = "QUERY_TASK_DEFINITION_LIST_PAGING_NOTES") - @Parameters({ - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = false, schema = @Schema(implementation = long.class)), - @Parameter(name = "searchWorkflowName", description = "SEARCH_WORKFLOW_NAME", required = false, schema = @Schema(implementation = String.class)), - @Parameter(name = "searchTaskName", description = "SEARCH_TASK_NAME", required = false, schema = @Schema(implementation = String.class)), - @Parameter(name = "taskType", description = "TASK_TYPE", required = false, schema = @Schema(implementation = String.class, example = "SHELL")), - @Parameter(name = "taskExecuteType", description = "TASK_EXECUTE_TYPE", required = false, schema = @Schema(implementation = TaskExecuteType.class, example = "STREAM")), - @Parameter(name = "pageNo", description = "PAGE_NO", required = true, schema = @Schema(implementation = int.class, example = "1")), - @Parameter(name = "pageSize", description = "PAGE_SIZE", required = true, schema = @Schema(implementation = int.class, example = "10")) - }) - @GetMapping() - @ResponseStatus(HttpStatus.OK) - @ApiException(QUERY_TASK_DEFINITION_LIST_PAGING_ERROR) - public Result queryTaskDefinitionListPaging(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode, - @RequestParam(value = "searchTaskName", required = false) String searchTaskName, - @RequestParam(value = "taskType", required = false) String taskType, - @RequestParam(value = "taskExecuteType", required = false, defaultValue = "BATCH") TaskExecuteType taskExecuteType, - @RequestParam("pageNo") Integer pageNo, - @RequestParam("pageSize") Integer pageSize) { - checkPageParams(pageNo, pageSize); - searchTaskName = ParameterUtils.handleEscapes(searchTaskName); - return taskDefinitionService.queryTaskDefinitionListPaging(loginUser, projectCode, - searchTaskName, taskType, taskExecuteType, pageNo, pageSize); - } - /** * gen task code list * diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/v2/TaskDefinitionV2Controller.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/v2/TaskDefinitionV2Controller.java index 66fff8cbe9..f96368067a 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/v2/TaskDefinitionV2Controller.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/v2/TaskDefinitionV2Controller.java @@ -17,16 +17,11 @@ package org.apache.dolphinscheduler.api.controller.v2; -import static org.apache.dolphinscheduler.api.enums.Status.CREATE_TASK_DEFINITION_ERROR; -import static org.apache.dolphinscheduler.api.enums.Status.DELETE_SCHEDULE_BY_ID_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_DETAIL_OF_TASK_DEFINITION_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_DEFINITION_LIST; -import static org.apache.dolphinscheduler.api.enums.Status.UPDATE_TASK_DEFINITION_ERROR; import org.apache.dolphinscheduler.api.controller.BaseController; -import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest; import org.apache.dolphinscheduler.api.dto.task.TaskFilterRequest; -import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest; import org.apache.dolphinscheduler.api.exceptions.ApiException; import org.apache.dolphinscheduler.api.service.TaskDefinitionService; import org.apache.dolphinscheduler.api.utils.PageInfo; @@ -37,11 +32,9 @@ import org.apache.dolphinscheduler.dao.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestAttribute; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -65,65 +58,6 @@ public class TaskDefinitionV2Controller extends BaseController { @Autowired private TaskDefinitionService taskDefinitionService; - /** - * Create resource task definition - * - * @param loginUser login user - * @param taskCreateRequest task definition json - * @return Result object created - */ - @Operation(summary = "create", description = "CREATE_TASK_DEFINITION_NOTES") - @PostMapping(consumes = {"application/json"}) - @ResponseStatus(HttpStatus.CREATED) - @ApiException(CREATE_TASK_DEFINITION_ERROR) - public Result createTaskDefinition(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @RequestBody TaskCreateRequest taskCreateRequest) { - TaskDefinition taskDefinition = taskDefinitionService.createTaskDefinitionV2(loginUser, taskCreateRequest); - return Result.success(taskDefinition); - } - - /** - * Delete resource task definition by code - * - * @param loginUser login user - * @param code task definition code - */ - @Operation(summary = "delete", description = "DELETE_TASK_DEFINITION_VERSION_NOTES") - @Parameters({ - @Parameter(name = "code", description = "TASK_DEFINITION_CODE", schema = @Schema(implementation = long.class, example = "123456", required = true)) - }) - @DeleteMapping(value = "/{code}") - @ResponseStatus(HttpStatus.OK) - @ApiException(DELETE_SCHEDULE_BY_ID_ERROR) - public Result deleteTaskDefinition(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @PathVariable("code") Long code) { - taskDefinitionService.deleteTaskDefinitionByCode(loginUser, code); - return Result.success(); - } - - /** - * Update resource task definition by code - * - * @param loginUser login user - * @param code task code of resource you want to update - * @param taskUpdateRequest workflowUpdateRequest - * @return ResourceResponse object updated - */ - @Operation(summary = "update", description = "UPDATE_TASK_DEFINITION_NOTES") - @Parameters({ - @Parameter(name = "code", description = "TASK_DEFINITION_CODE", schema = @Schema(implementation = long.class, example = "123456", required = true)) - }) - @PutMapping(value = "/{code}") - @ResponseStatus(HttpStatus.OK) - @ApiException(UPDATE_TASK_DEFINITION_ERROR) - public Result updateTaskDefinition(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @PathVariable("code") Long code, - @RequestBody TaskUpdateRequest taskUpdateRequest) { - TaskDefinition taskDefinition = - taskDefinitionService.updateTaskDefinitionV2(loginUser, code, taskUpdateRequest); - return Result.success(taskDefinition); - } - /** * Get resource task definition by code * diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java index 00ebbc64e5..a0eccf7e8e 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java @@ -17,13 +17,10 @@ package org.apache.dolphinscheduler.api.service; -import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest; import org.apache.dolphinscheduler.api.dto.task.TaskFilterRequest; -import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest; import org.apache.dolphinscheduler.api.utils.PageInfo; import org.apache.dolphinscheduler.api.utils.Result; import org.apache.dolphinscheduler.common.enums.ReleaseState; -import org.apache.dolphinscheduler.common.enums.TaskExecuteType; import org.apache.dolphinscheduler.dao.entity.TaskDefinition; import org.apache.dolphinscheduler.dao.entity.User; @@ -34,43 +31,6 @@ import java.util.Map; */ public interface TaskDefinitionService { - /** - * create task definition - * - * @param loginUser login user - * @param projectCode project code - * @param taskDefinitionJson task definition json - */ - Map createTaskDefinition(User loginUser, - long projectCode, - String taskDefinitionJson); - - /** - * Create resource task definition - * - * @param loginUser login user - * @param taskCreateRequest task definition json - * @Return new TaskDefinition have created - */ - TaskDefinition createTaskDefinitionV2(User loginUser, - TaskCreateRequest taskCreateRequest); - - /** - * create single task definition that binds the workflow - * - * @param loginUser login user - * @param projectCode project code - * @param processDefinitionCode process definition code - * @param taskDefinitionJsonObj task definition json object - * @param upstreamCodes upstream task codes, sep comma - * @return create result code - */ - Map createTaskBindsWorkFlow(User loginUser, - long projectCode, - long processDefinitionCode, - String taskDefinitionJsonObj, - String upstreamCodes); - /** * query task definition * @@ -84,43 +44,6 @@ public interface TaskDefinitionService { long processCode, String taskName); - /** - * Delete resource task definition by code - * - * Only task release state offline and no downstream tasks can be deleted, will also remove the exists - * task relation [upstreamTaskCode, taskCode] - * - * @param loginUser login user - * @param taskCode task code - */ - void deleteTaskDefinitionByCode(User loginUser, - long taskCode); - - /** - * update task definition - * - * @param loginUser login user - * @param projectCode project code - * @param taskCode task code - * @param taskDefinitionJsonObj task definition json object - */ - Map updateTaskDefinition(User loginUser, - long projectCode, - long taskCode, - String taskDefinitionJsonObj); - - /** - * Update resource task definition by code - * - * @param loginUser login user - * @param taskCode task code - * @param taskUpdateRequest task definition json object - * @return new TaskDefinition have updated - */ - TaskDefinition updateTaskDefinitionV2(User loginUser, - long taskCode, - TaskUpdateRequest taskUpdateRequest); - /** * Get resource task definition by code * @@ -212,26 +135,6 @@ public interface TaskDefinitionService { long projectCode, long taskCode); - /** - * query task definition list paging - * - * @param loginUser login user - * @param projectCode project code - * @param searchTaskName searchTaskName - * @param taskType taskType - * @param taskExecuteType taskExecuteType - * @param pageNo page number - * @param pageSize page size - * @return task definition page - */ - Result queryTaskDefinitionListPaging(User loginUser, - long projectCode, - String searchTaskName, - String taskType, - TaskExecuteType taskExecuteType, - Integer pageNo, - Integer pageSize); - /** * gen task code list * diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java index ae3410cb77..c080c405b2 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java @@ -18,17 +18,13 @@ package org.apache.dolphinscheduler.api.service.impl; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION; -import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_CREATE; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_DELETE; -import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_UPDATE; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_VERSION_VIEW; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION; import static org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager.checkTaskParameters; -import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest; import org.apache.dolphinscheduler.api.dto.task.TaskFilterRequest; -import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest; import org.apache.dolphinscheduler.api.dto.taskRelation.TaskRelationUpdateUpstreamRequest; import org.apache.dolphinscheduler.api.dto.workflow.WorkflowUpdateRequest; import org.apache.dolphinscheduler.api.enums.Status; @@ -139,54 +135,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe @Autowired private ProcessDefinitionLogMapper processDefinitionLogMapper; - /** - * create task definition - * - * @param loginUser login user - * @param projectCode project code - * @param taskDefinitionJson task definition json - */ - @Transactional - @Override - public Map createTaskDefinition(User loginUser, - long projectCode, - String taskDefinitionJson) { - 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; - } - - List taskDefinitionLogs = JSONUtils.toList(taskDefinitionJson, TaskDefinitionLog.class); - if (CollectionUtils.isEmpty(taskDefinitionLogs)) { - log.warn("Parameter taskDefinitionJson is invalid."); - putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJson); - return result; - } - for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) { - if (!checkTaskParameters(taskDefinitionLog.getTaskType(), taskDefinitionLog.getTaskParams())) { - log.warn("Task definition {} parameters are invalid.", taskDefinitionLog.getName()); - putMsg(result, Status.PROCESS_NODE_S_PARAMETER_INVALID, taskDefinitionLog.getName()); - return result; - } - } - int saveTaskResult = processService.saveTaskDefine(loginUser, projectCode, taskDefinitionLogs, Boolean.TRUE); - if (saveTaskResult == Constants.DEFINITION_FAILURE) { - log.error("Create task definition error, projectCode:{}.", projectCode); - putMsg(result, Status.CREATE_TASK_DEFINITION_ERROR); - throw new ServiceException(Status.CREATE_TASK_DEFINITION_ERROR); - } - Map resData = new HashMap<>(); - resData.put("total", taskDefinitionLogs.size()); - resData.put("code", StringUtils - .join(taskDefinitionLogs.stream().map(TaskDefinition::getCode).collect(Collectors.toList()), ",")); - putMsg(result, Status.SUCCESS); - result.put(Constants.DATA_LIST, resData); - return result; - } - private TaskDefinitionLog persist2TaskDefinitionLog(User user, TaskDefinition taskDefinition) { TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog(taskDefinition); taskDefinitionLog.setOperator(user.getId()); @@ -226,171 +174,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe workflowUpdateRequest); } - /** - * Create resource task definition - * - * @param loginUser login user - * @param taskCreateRequest task definition json - * @return new TaskDefinition have created - */ - @Override - @Transactional - public TaskDefinition createTaskDefinitionV2(User loginUser, - TaskCreateRequest taskCreateRequest) { - TaskDefinition taskDefinition = taskCreateRequest.convert2TaskDefinition(); - ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(taskCreateRequest.getWorkflowCode()); - if (processDefinition == null) { - throw new ServiceException(Status.PROCESS_DEFINE_NOT_EXIST, taskCreateRequest.getWorkflowCode()); - } - // Add project code from process definition if not exists - if (taskDefinition.getProjectCode() == 0L) { - taskDefinition.setProjectCode(processDefinition.getProjectCode()); - } - this.checkTaskDefinitionValid(loginUser, taskDefinition, TASK_DEFINITION_CREATE); - - long taskDefinitionCode; - try { - taskDefinitionCode = CodeGenerateUtils.genCode(); - } catch (CodeGenerateException e) { - throw new ServiceException(Status.INTERNAL_SERVER_ERROR_ARGS); - } - taskDefinition.setCode(taskDefinitionCode); - - int create = taskDefinitionMapper.insert(taskDefinition); - if (create <= 0) { - throw new ServiceException(Status.CREATE_TASK_DEFINITION_ERROR); - } - this.persist2TaskDefinitionLog(loginUser, taskDefinition); - - // update related objects: task relationship, workflow's location(need to set to null and front-end will auto - // format it) - this.updateTaskUpstreams(loginUser, taskCreateRequest.getWorkflowCode(), taskDefinition.getCode(), - taskCreateRequest.getUpstreamTasksCodes()); - this.updateWorkflowLocation(loginUser, processDefinition); - return taskDefinition; - } - - /** - * create single task definition that binds the workflow - * - * @param loginUser login user - * @param projectCode project code - * @param processDefinitionCode process definition code - * @param taskDefinitionJsonObj task definition json object - * @param upstreamCodes upstream task codes, sep comma - * @return create result code - */ - @Transactional - @Override - public Map createTaskBindsWorkFlow(User loginUser, - long projectCode, - long processDefinitionCode, - String taskDefinitionJsonObj, - String upstreamCodes) { - 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; - } - ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(processDefinitionCode); - if (processDefinition == null || projectCode != processDefinition.getProjectCode()) { - log.error("Process definition does not exist, processDefinitionCode:{}.", processDefinitionCode); - putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, String.valueOf(processDefinitionCode)); - return result; - } - if (processDefinition.getReleaseState() == ReleaseState.ONLINE) { - log.warn("Task definition can not be created due to process definition is {}, processDefinitionCode:{}.", - ReleaseState.ONLINE.getDescp(), processDefinition.getCode()); - putMsg(result, Status.PROCESS_DEFINE_STATE_ONLINE, String.valueOf(processDefinitionCode)); - return result; - } - TaskDefinitionLog taskDefinition = JSONUtils.parseObject(taskDefinitionJsonObj, TaskDefinitionLog.class); - if (taskDefinition == null) { - log.warn("Parameter taskDefinitionJsonObj is invalid json."); - putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj); - return result; - } - if (!checkTaskParameters(taskDefinition.getTaskType(), taskDefinition.getTaskParams())) { - putMsg(result, Status.PROCESS_NODE_S_PARAMETER_INVALID, taskDefinition.getName()); - return result; - } - long taskCode = taskDefinition.getCode(); - if (taskCode == 0) { - taskDefinition.setCode(CodeGenerateUtils.genCode()); - } - List processTaskRelationLogList = - processTaskRelationMapper.queryByProcessCode(processDefinitionCode) - .stream() - .map(ProcessTaskRelationLog::new) - .collect(Collectors.toList()); - - if (StringUtils.isNotBlank(upstreamCodes)) { - Set upstreamTaskCodes = Arrays.stream(upstreamCodes.split(Constants.COMMA)).map(Long::parseLong) - .collect(Collectors.toSet()); - List upstreamTaskDefinitionList = taskDefinitionMapper.queryByCodeList(upstreamTaskCodes); - Set queryUpStreamTaskCodes = - upstreamTaskDefinitionList.stream().map(TaskDefinition::getCode).collect(Collectors.toSet()); - // upstreamTaskCodes - queryUpStreamTaskCodes - Set diffCode = upstreamTaskCodes.stream().filter(code -> !queryUpStreamTaskCodes.contains(code)) - .collect(Collectors.toSet()); - if (CollectionUtils.isNotEmpty(diffCode)) { - String taskCodes = StringUtils.join(diffCode, Constants.COMMA); - log.error("Some task definitions with parameter upstreamCodes do not exist, taskDefinitionCodes:{}.", - taskCodes); - putMsg(result, Status.TASK_DEFINE_NOT_EXIST, taskCodes); - return result; - } - for (TaskDefinition upstreamTask : upstreamTaskDefinitionList) { - ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog(); - processTaskRelationLog.setPreTaskCode(upstreamTask.getCode()); - processTaskRelationLog.setPreTaskVersion(upstreamTask.getVersion()); - processTaskRelationLog.setPostTaskCode(taskCode); - processTaskRelationLog.setPostTaskVersion(Constants.VERSION_FIRST); - processTaskRelationLog.setConditionType(ConditionType.NONE); - processTaskRelationLog.setConditionParams("{}"); - processTaskRelationLogList.add(processTaskRelationLog); - } - } else { - ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog(); - processTaskRelationLog.setPreTaskCode(0); - processTaskRelationLog.setPreTaskVersion(0); - processTaskRelationLog.setPostTaskCode(taskCode); - processTaskRelationLog.setPostTaskVersion(Constants.VERSION_FIRST); - processTaskRelationLog.setConditionType(ConditionType.NONE); - processTaskRelationLog.setConditionParams("{}"); - processTaskRelationLogList.add(processTaskRelationLog); - } - int insertResult = processService.saveTaskRelation(loginUser, projectCode, processDefinition.getCode(), - processDefinition.getVersion(), - processTaskRelationLogList, Lists.newArrayList(), Boolean.TRUE); - if (insertResult != Constants.EXIT_CODE_SUCCESS) { - log.error( - "Save new version process task relations error, processDefinitionCode:{}, processDefinitionVersion:{}.", - processDefinition.getCode(), processDefinition.getVersion()); - putMsg(result, Status.CREATE_PROCESS_TASK_RELATION_ERROR); - throw new ServiceException(Status.CREATE_PROCESS_TASK_RELATION_ERROR); - } else - log.info( - "Save new version process task relations complete, processDefinitionCode:{}, processDefinitionVersion:{}.", - processDefinition.getCode(), processDefinition.getVersion()); - - int saveTaskResult = - processService.saveTaskDefine(loginUser, projectCode, Lists.newArrayList(taskDefinition), Boolean.TRUE); - if (saveTaskResult == Constants.DEFINITION_FAILURE) { - log.error("Save task definition error, projectCode:{}, taskDefinitionCode:{}.", projectCode, - taskDefinition.getCode()); - putMsg(result, Status.CREATE_TASK_DEFINITION_ERROR); - throw new ServiceException(Status.CREATE_TASK_DEFINITION_ERROR); - } else - log.info("Save task definition complete, projectCode:{}, taskDefinitionCode:{}.", projectCode, - taskDefinition.getCode()); - putMsg(result, Status.SUCCESS); - result.put(Constants.DATA_LIST, taskDefinition); - return result; - } - /** * query task definition * @@ -453,45 +236,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe } } - /** - * Delete resource task definition by code - *

- * Only task release state offline and no downstream tasks can be deleted, will also remove the exists - * task relation [upstreamTaskCode, taskCode] - * - * @param loginUser login user - * @param taskCode task code - */ - @Transactional - @Override - public void deleteTaskDefinitionByCode(User loginUser, long taskCode) { - TaskDefinition taskDefinition = taskDefinitionMapper.queryByCode(taskCode); - if (taskDefinition == null) { - throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, taskCode); - } - - this.taskCanDeleteValid(loginUser, taskDefinition, loginUser); - int delete = taskDefinitionMapper.deleteByCode(taskCode); - if (delete <= 0) { - throw new ServiceException(Status.DELETE_TASK_DEFINE_BY_CODE_MSG_ERROR, taskDefinition.getCode()); - } - - // Delete task upstream tasks if exists - List taskRelationList = - processTaskRelationMapper.queryUpstreamByCode(taskDefinition.getProjectCode(), taskCode); - if (CollectionUtils.isNotEmpty(taskRelationList)) { - log.debug( - "Task definition has upstream tasks, start handle them after delete task, taskDefinitionCode:{}.", - taskCode); - long processDefinitionCode = taskRelationList.get(0).getProcessDefinitionCode(); - List processTaskRelations = - processTaskRelationMapper.queryByProcessCode(processDefinitionCode); - List relationList = processTaskRelations.stream() - .filter(r -> r.getPostTaskCode() != taskCode).collect(Collectors.toList()); - updateDag(loginUser, processDefinitionCode, relationList, Lists.newArrayList()); - } - } - public void updateDag(User loginUser, long processDefinitionCode, List processTaskRelationList, List taskDefinitionLogs) { @@ -525,42 +269,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe } } - /** - * update task definition - * - * @param loginUser login user - * @param projectCode project code - * @param taskCode task code - * @param taskDefinitionJsonObj task definition json object - */ - @Transactional - @Override - public Map updateTaskDefinition(User loginUser, long projectCode, long taskCode, - String taskDefinitionJsonObj) { - Map result = new HashMap<>(); - TaskDefinitionLog taskDefinitionToUpdate = - updateTask(loginUser, projectCode, taskCode, taskDefinitionJsonObj, result); - if (taskDefinitionToUpdate == null) { - return result; - } - List taskRelationList = - processTaskRelationMapper.queryUpstreamByCode(projectCode, taskCode); - if (CollectionUtils.isNotEmpty(taskRelationList)) { - log.info( - "Task definition has upstream tasks, start handle them after update task, taskDefinitionCode:{}.", - taskCode); - long processDefinitionCode = taskRelationList.get(0).getProcessDefinitionCode(); - List processTaskRelations = - processTaskRelationMapper.queryByProcessCode(processDefinitionCode); - updateDag(loginUser, processDefinitionCode, processTaskRelations, - Lists.newArrayList(taskDefinitionToUpdate)); - } - log.info("Update task definition complete, projectCode:{}, taskDefinitionCode:{}.", projectCode, taskCode); - result.put(Constants.DATA_LIST, taskCode); - putMsg(result, Status.SUCCESS); - return result; - } - private void TaskDefinitionUpdateValid(TaskDefinition taskDefinitionOriginal, TaskDefinition taskDefinitionUpdate) { // Task already online if (processService.isTaskOnline(taskDefinitionOriginal.getCode()) @@ -583,52 +291,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe } } - /** - * update task definition - * - * @param loginUser login user - * @param taskCode task code - * @param taskUpdateRequest task definition json object - * @return new TaskDefinition have updated - */ - @Transactional - @Override - public TaskDefinition updateTaskDefinitionV2(User loginUser, - long taskCode, - TaskUpdateRequest taskUpdateRequest) { - TaskDefinition taskDefinitionOriginal = taskDefinitionMapper.queryByCode(taskCode); - if (taskDefinitionOriginal == null) { - throw new ServiceException(Status.TASK_DEFINITION_NOT_EXISTS, taskCode); - } - - TaskDefinition taskDefinitionUpdate = taskUpdateRequest.mergeIntoTaskDefinition(taskDefinitionOriginal); - - this.checkTaskDefinitionValid(loginUser, taskDefinitionUpdate, TASK_DEFINITION_UPDATE); - this.TaskDefinitionUpdateValid(taskDefinitionOriginal, taskDefinitionUpdate); - - int update = taskDefinitionMapper.updateById(taskDefinitionUpdate); - if (update <= 0) { - throw new ServiceException(Status.UPDATE_TASK_DEFINITION_ERROR); - } - TaskDefinitionLog taskDefinitionLog = this.persist2TaskDefinitionLog(loginUser, taskDefinitionUpdate); - - List taskRelationList = - processTaskRelationMapper.queryUpstreamByCode(taskDefinitionUpdate.getProjectCode(), taskCode); - - if (CollectionUtils.isNotEmpty(taskRelationList)) { - log.info( - "Task definition has upstream tasks, start handle them after update task, taskDefinitionCode:{}.", - taskCode); - long processDefinitionCode = taskRelationList.get(0).getProcessDefinitionCode(); - List processTaskRelations = - processTaskRelationMapper.queryByProcessCode(processDefinitionCode); - updateDag(loginUser, processDefinitionCode, processTaskRelations, Lists.newArrayList(taskDefinitionLog)); - } - this.updateTaskUpstreams(loginUser, taskUpdateRequest.getWorkflowCode(), taskDefinitionUpdate.getCode(), - taskUpdateRequest.getUpstreamTasksCodes()); - return taskDefinitionUpdate; - } - /** * Get resource task definition by code * @@ -1144,39 +806,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe return result; } - @Override - public Result queryTaskDefinitionListPaging(User loginUser, - long projectCode, - String searchTaskName, - String taskType, - TaskExecuteType taskExecuteType, - Integer pageNo, - Integer pageSize) { - Result result = new Result(); - Project project = projectMapper.queryByCode(projectCode); - // check user access for project - Map checkResult = - projectService.checkProjectAndAuth(loginUser, project, projectCode, TASK_DEFINITION); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - putMsg(result, resultStatus); - return result; - } - taskType = taskType == null ? StringUtils.EMPTY : taskType; - Page page = new Page<>(pageNo, pageSize); - // first, query task code by page size - IPage taskMainInfoIPage = taskDefinitionMapper.queryDefineListPaging(page, projectCode, - searchTaskName, taskType, taskExecuteType); - // then, query task relevant info by task code - fillRecords(projectCode, taskMainInfoIPage); - PageInfo pageInfo = new PageInfo<>(pageNo, pageSize); - pageInfo.setTotal((int) taskMainInfoIPage.getTotal()); - pageInfo.setTotalList(taskMainInfoIPage.getRecords()); - result.setData(pageInfo); - putMsg(result, Status.SUCCESS); - return result; - } - private void fillRecords(long projectCode, IPage taskMainInfoIPage) { List records = Collections.emptyList(); if (CollectionUtils.isNotEmpty(taskMainInfoIPage.getRecords())) { diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java index 8460c59924..bb235cb952 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java @@ -17,12 +17,7 @@ package org.apache.dolphinscheduler.api.service; -import static org.apache.dolphinscheduler.api.AssertionsHelper.assertDoesNotThrow; -import static org.apache.dolphinscheduler.api.AssertionsHelper.assertThrowsServiceException; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION; -import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_CREATE; -import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_DELETE; -import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_UPDATE; import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; @@ -31,18 +26,12 @@ import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; -import org.apache.dolphinscheduler.api.dto.task.TaskCreateRequest; -import org.apache.dolphinscheduler.api.dto.task.TaskUpdateRequest; -import org.apache.dolphinscheduler.api.dto.taskRelation.TaskRelationUpdateUpstreamRequest; -import org.apache.dolphinscheduler.api.dto.workflow.WorkflowUpdateRequest; import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.api.exceptions.ServiceException; import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl; import org.apache.dolphinscheduler.api.service.impl.TaskDefinitionServiceImpl; -import org.apache.dolphinscheduler.api.utils.Result; import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.common.enums.Flag; -import org.apache.dolphinscheduler.common.enums.Priority; import org.apache.dolphinscheduler.common.enums.ReleaseState; import org.apache.dolphinscheduler.common.enums.UserType; import org.apache.dolphinscheduler.common.utils.JSONUtils; @@ -53,7 +42,6 @@ import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelationLog; import org.apache.dolphinscheduler.dao.entity.Project; import org.apache.dolphinscheduler.dao.entity.TaskDefinition; import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog; -import org.apache.dolphinscheduler.dao.entity.TaskMainInfo; import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionLogMapper; import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper; @@ -64,14 +52,12 @@ import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionLogMapper; import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper; import org.apache.dolphinscheduler.dao.repository.ProcessTaskRelationLogDao; import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager; -import org.apache.dolphinscheduler.plugin.task.shell.ShellTaskChannelFactory; import org.apache.dolphinscheduler.service.process.ProcessService; import org.apache.dolphinscheduler.service.process.ProcessServiceImpl; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -88,9 +74,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) public class TaskDefinitionServiceImplTest { @@ -161,80 +144,6 @@ public class TaskDefinitionServiceImplTest { user = loginUser; } - @Test - public void createTaskDefinition() { - try ( - MockedStatic taskPluginManagerMockedStatic = - Mockito.mockStatic(TaskPluginManager.class)) { - taskPluginManagerMockedStatic - .when(() -> TaskPluginManager.checkTaskParameters(Mockito.any(), Mockito.any())) - .thenReturn(true); - Project project = getProject(); - when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project); - - Map result = new HashMap<>(); - when(projectService.hasProjectAndWritePerm(user, project, result)) - .thenReturn(true); - - String createTaskDefinitionJson = - "[{\"name\":\"detail_up\",\"description\":\"\",\"taskType\":\"SHELL\",\"taskParams\":" - + "\"{\\\"resourceList\\\":[],\\\"localParams\\\":[{\\\"prop\\\":\\\"datetime\\\",\\\"direct\\\":\\\"IN\\\"," - + "\\\"type\\\":\\\"VARCHAR\\\",\\\"value\\\":\\\"${system.datetime}\\\"}],\\\"rawScript\\\":" - + "\\\"echo ${datetime}\\\",\\\"conditionResult\\\":\\\"{\\\\\\\"successNode\\\\\\\":[\\\\\\\"\\\\\\\"]," - + "\\\\\\\"failedNode\\\\\\\":[\\\\\\\"\\\\\\\"]}\\\",\\\"dependence\\\":{}}\",\"flag\":0,\"taskPriority\":0," - + "\"workerGroup\":\"default\",\"failRetryTimes\":0,\"failRetryInterval\":0,\"timeoutFlag\":0," - + "\"timeoutNotifyStrategy\":0,\"timeout\":0,\"delayTime\":0,\"resourceIds\":\"\"}]"; - Map relation = taskDefinitionService - .createTaskDefinition(user, PROJECT_CODE, createTaskDefinitionJson); - assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); - - } - } - - @Test - public void updateTaskDefinition() { - try ( - MockedStatic taskPluginManagerMockedStatic = - Mockito.mockStatic(TaskPluginManager.class)) { - taskPluginManagerMockedStatic - .when(() -> TaskPluginManager.checkTaskParameters(Mockito.any(), Mockito.any())) - .thenReturn(true); - String taskDefinitionJson = getTaskDefinitionJson(); - - Project project = getProject(); - when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project); - - Map result = new HashMap<>(); - putMsg(result, Status.SUCCESS, PROJECT_CODE); - when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true); - - when(processService.isTaskOnline(TASK_CODE)).thenReturn(Boolean.FALSE); - when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(new TaskDefinition()); - when(taskDefinitionMapper.updateById(Mockito.any(TaskDefinitionLog.class))).thenReturn(1); - when(taskDefinitionLogMapper.insert(Mockito.any(TaskDefinitionLog.class))).thenReturn(1); - when(processTaskRelationLogDao.insert(Mockito.any(ProcessTaskRelationLog.class))).thenReturn(1); - when(processDefinitionMapper.queryByCode(2L)).thenReturn(new ProcessDefinition()); - when(processDefinitionMapper.updateById(Mockito.any(ProcessDefinition.class))).thenReturn(1); - when(processDefinitionLogMapper.insert(Mockito.any(ProcessDefinitionLog.class))).thenReturn(1); - when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1); - when(processTaskRelationMapper.queryProcessTaskRelationByTaskCodeAndTaskVersion(TASK_CODE, 0)) - .thenReturn(getProcessTaskRelationList2()); - when(processTaskRelationMapper - .updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(1); - result = taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE, taskDefinitionJson); - assertEquals(Status.SUCCESS, result.get(Constants.STATUS)); - // failure - when(processTaskRelationMapper - .updateProcessTaskRelationTaskVersion(Mockito.any(ProcessTaskRelation.class))).thenReturn(2); - exception = Assertions.assertThrows(ServiceException.class, - () -> taskDefinitionService.updateTaskDefinition(user, PROJECT_CODE, TASK_CODE, - taskDefinitionJson)); - assertEquals(Status.PROCESS_TASK_RELATION_BATCH_UPDATE_ERROR.getCode(), - ((ServiceException) exception).getCode()); - } - - } - @Test public void queryTaskDefinitionByName() { String taskName = "task"; @@ -255,33 +164,6 @@ public class TaskDefinitionServiceImplTest { assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); } - @Test - public void deleteTaskDefinitionByCode() { - Project project = getProject(); - when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project); - - // error task definition not find - exception = Assertions.assertThrows(ServiceException.class, - () -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE)); - assertEquals(Status.TASK_DEFINE_NOT_EXIST.getCode(), ((ServiceException) exception).getCode()); - - // error delete single task definition object - when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(getTaskDefinition()); - when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(0); - when(projectService.hasProjectAndWritePerm(user, project, new HashMap<>())).thenReturn(true); - exception = Assertions.assertThrows(ServiceException.class, - () -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE)); - assertEquals(Status.DELETE_TASK_DEFINE_BY_CODE_MSG_ERROR.getCode(), - ((ServiceException) exception).getCode()); - - // success - doNothing().when(projectService).checkProjectAndAuthThrowException(user, project, - TASK_DEFINITION_DELETE); - when(processTaskRelationMapper.queryDownstreamByTaskCode(TASK_CODE)).thenReturn(new ArrayList<>()); - when(taskDefinitionMapper.deleteByCode(TASK_CODE)).thenReturn(1); - Assertions.assertDoesNotThrow(() -> taskDefinitionService.deleteTaskDefinitionByCode(user, TASK_CODE)); - } - @Test public void switchVersion() { Project project = getProject(); @@ -356,33 +238,6 @@ public class TaskDefinitionServiceImplTest { assertEquals(Status.SUCCESS, genTaskCodeList.get(Constants.STATUS)); } - @Test - public void testQueryTaskDefinitionListPaging() { - Project project = getProject(); - Map checkResult = new HashMap<>(); - checkResult.put(Constants.STATUS, Status.SUCCESS); - Integer pageNo = 1; - Integer pageSize = 10; - IPage taskMainInfoIPage = new Page<>(); - TaskMainInfo taskMainInfo = new TaskMainInfo(); - taskMainInfo.setTaskCode(TASK_CODE); - taskMainInfo.setUpstreamTaskCode(4L); - taskMainInfo.setUpstreamTaskName("4"); - taskMainInfoIPage.setRecords(Collections.singletonList(taskMainInfo)); - taskMainInfoIPage.setTotal(10L); - when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project); - when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION)) - .thenReturn(checkResult); - when(taskDefinitionMapper.queryDefineListPaging(Mockito.any(Page.class), Mockito.anyLong(), - Mockito.isNull(), Mockito.anyString(), Mockito.isNull())) - .thenReturn(taskMainInfoIPage); - when(taskDefinitionMapper.queryDefineListByCodeList(PROJECT_CODE, Collections.singletonList(3L))) - .thenReturn(Collections.singletonList(taskMainInfo)); - Result result = taskDefinitionService.queryTaskDefinitionListPaging(user, PROJECT_CODE, - null, null, null, pageNo, pageSize); - assertEquals(Status.SUCCESS.getMsg(), result.getMsg()); - } - @Test public void testReleaseTaskDefinition() { when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject()); @@ -425,140 +280,6 @@ public class TaskDefinitionServiceImplTest { assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, failResult.get(Constants.STATUS)); } - @Test - public void testCreateTaskDefinitionV2() { - TaskCreateRequest taskCreateRequest = new TaskCreateRequest(); - taskCreateRequest.setProjectCode(PROJECT_CODE); - taskCreateRequest.setWorkflowCode(PROCESS_DEFINITION_CODE); - - // error process definition not find - assertThrowsServiceException(Status.PROCESS_DEFINE_NOT_EXIST, - () -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - - // error project not find - when(processDefinitionMapper.queryByCode(PROCESS_DEFINITION_CODE)).thenReturn(getProcessDefinition()); - when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject()); - doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService) - .checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_CREATE); - assertThrowsServiceException(Status.PROJECT_NOT_EXIST, - () -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - - // error task definition - taskCreateRequest.setTaskType(ShellTaskChannelFactory.NAME); - taskCreateRequest.setTaskParams(JSONUtils.toJsonString(new HashMap<>())); - doNothing().when(projectService).checkProjectAndAuthThrowException(user, getProject(), TASK_DEFINITION_CREATE); - assertThrowsServiceException(Status.PROCESS_NODE_S_PARAMETER_INVALID, - () -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - - try ( - MockedStatic taskPluginManagerMockedStatic = - Mockito.mockStatic(TaskPluginManager.class)) { - taskPluginManagerMockedStatic - .when(() -> TaskPluginManager.checkTaskParameters(Mockito.any(), Mockito.any())) - .thenReturn(true); - - // error create task definition object - when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(0); - assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_ERROR, - () -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - - // error sync to task definition log - when(taskDefinitionMapper.insert(isA(TaskDefinition.class))).thenReturn(1); - when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0); - assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_LOG_ERROR, - () -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - - // success - when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1); - // we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService - when( - processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class), - isA(Boolean.class), - isA(TaskRelationUpdateUpstreamRequest.class))) - .thenReturn(getProcessTaskRelationList()); - when(processDefinitionService.updateSingleProcessDefinition(isA(User.class), isA(Long.class), - isA(WorkflowUpdateRequest.class))).thenReturn(getProcessDefinition()); - assertDoesNotThrow(() -> taskDefinitionService.createTaskDefinitionV2(user, taskCreateRequest)); - } - - } - - @Test - public void testUpdateTaskDefinitionV2() { - TaskUpdateRequest taskUpdateRequest = new TaskUpdateRequest(); - TaskDefinition taskDefinition = getTaskDefinition(); - Project project = getProject(); - - // error task definition not exists - assertThrowsServiceException(Status.TASK_DEFINITION_NOT_EXISTS, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // error project not find - when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition); - when(projectMapper.queryByCode(isA(Long.class))).thenReturn(project); - doThrow(new ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService) - .checkProjectAndAuthThrowException(user, project, TASK_DEFINITION_UPDATE); - assertThrowsServiceException(Status.PROJECT_NOT_EXIST, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // error task definition - doNothing().when(projectService).checkProjectAndAuthThrowException(user, project, TASK_DEFINITION_UPDATE); - - try ( - MockedStatic taskPluginManagerMockedStatic = - Mockito.mockStatic(TaskPluginManager.class)) { - taskPluginManagerMockedStatic - .when(() -> TaskPluginManager.checkTaskParameters(Mockito.any(), Mockito.any())) - .thenReturn(false); - assertThrowsServiceException(Status.PROCESS_NODE_S_PARAMETER_INVALID, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - } - - try ( - MockedStatic taskPluginManagerMockedStatic = - Mockito.mockStatic(TaskPluginManager.class)) { - taskPluginManagerMockedStatic - .when(() -> TaskPluginManager.checkTaskParameters(Mockito.any(), Mockito.any())) - .thenReturn(true); - // error task definition nothing update - when(processService.isTaskOnline(TASK_CODE)).thenReturn(false); - assertThrowsServiceException(Status.TASK_DEFINITION_NOT_CHANGE, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // error task definition version invalid - taskUpdateRequest.setTaskPriority(String.valueOf(Priority.HIGH)); - assertThrowsServiceException(Status.DATA_IS_NOT_VALID, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // error task definition update effect number - when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(VERSION); - when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(0); - assertThrowsServiceException(Status.UPDATE_TASK_DEFINITION_ERROR, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // error task definition log insert - when(taskDefinitionMapper.updateById(isA(TaskDefinition.class))).thenReturn(1); - when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(0); - assertThrowsServiceException(Status.CREATE_TASK_DEFINITION_LOG_ERROR, - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - // success - when(taskDefinitionLogMapper.insert(isA(TaskDefinitionLog.class))).thenReturn(1); - // we do not test updateUpstreamTaskDefinition, because it should be tested in processTaskRelationService - when( - processTaskRelationService.updateUpstreamTaskDefinitionWithSyncDag(isA(User.class), isA(Long.class), - isA(Boolean.class), - isA(TaskRelationUpdateUpstreamRequest.class))) - .thenReturn(getProcessTaskRelationList()); - Assertions.assertDoesNotThrow( - () -> taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest)); - - taskDefinition = - taskDefinitionService.updateTaskDefinitionV2(user, TASK_CODE, taskUpdateRequest); - assertEquals(getTaskDefinition().getVersion() + 1, taskDefinition.getVersion()); - } - } - @Test public void testUpdateDag() { User loginUser = getLoginUser(); diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java index cfbe6e94e0..3f05b11f6d 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java @@ -17,7 +17,6 @@ package org.apache.dolphinscheduler.dao.mapper; -import org.apache.dolphinscheduler.common.enums.TaskExecuteType; import org.apache.dolphinscheduler.dao.entity.TaskDefinition; import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog; import org.apache.dolphinscheduler.dao.entity.TaskMainInfo; @@ -88,22 +87,6 @@ public interface TaskDefinitionMapper extends BaseMapper { */ int batchInsert(@Param("taskDefinitions") List taskDefinitions); - /** - * task main info page - * - * @param page page - * @param projectCode projectCode - * @param searchTaskName searchTaskName - * @param taskType taskType - * @param taskExecuteType taskExecuteType - * @return task main info IPage - */ - IPage queryDefineListPaging(IPage page, - @Param("projectCode") long projectCode, - @Param("searchTaskName") String searchTaskName, - @Param("taskType") String taskType, - @Param("taskExecuteType") TaskExecuteType taskExecuteType); - /** * task main info * @param projectCode project code diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml index ba06d5a9bd..71b1302f7c 100644 --- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml +++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml @@ -98,21 +98,6 @@ #{taskDefinition.taskGroupId}, #{taskDefinition.taskExecuteType}) -