From af720d3ef1849c6f2b166fe4406b8e6458fec1df Mon Sep 17 00:00:00 2001 From: chengshiwen Date: Sun, 20 Dec 2020 20:00:55 +0800 Subject: [PATCH] match frontend and backend for force success --- .../api/controller/TaskInstanceController.java | 8 ++++---- .../api/service/TaskInstanceService.java | 7 +++---- .../api/controller/TaskInstanceControllerTest.java | 4 ++-- .../api/service/TaskInstanceServiceTest.java | 12 ++++++------ .../dolphinscheduler/common/utils/VarPoolUtils.java | 2 +- .../dao/mapper/TaskInstanceMapper.java | 12 ++++++------ .../dao/mapper/TaskInstanceMapper.xml | 4 ++-- .../dao/mapper/TaskInstanceMapperTest.java | 8 ++++---- .../server/master/runner/MasterExecThread.java | 6 +++--- .../service/process/ProcessService.java | 6 +++--- .../src/js/conf/home/pages/dag/_source/config.js | 4 ++++ .../pages/instance/pages/list/_source/list.vue | 2 +- .../projects/pages/taskInstance/_source/list.vue | 6 ++++-- .../home/pages/projects/pages/taskInstance/index.vue | 8 +++++++- 14 files changed, 50 insertions(+), 39 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskInstanceController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskInstanceController.java index f80e536ea..6e7fbe71b 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskInstanceController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskInstanceController.java @@ -130,28 +130,28 @@ public class TaskInstanceController extends BaseController { } /** - * change one single task instance's state from FAILURE to FORCED_SUCCESS + * change one task instance's state from FAILURE to FORCED_SUCCESS * * @param loginUser login user * @param projectName project name * @param taskInstanceId task instance id * @return the result code and msg */ - @ApiOperation(value = "force-success", notes = "FORCE_SINGLE_TASK_SUCCESS") + @ApiOperation(value = "force-success", notes = "FORCE_TASK_SUCCESS") @ApiImplicitParams({ @ApiImplicitParam(name = "taskInstanceId", value = "TASK_INSTANCE_ID", required = true, dataType = "Int", example = "12") }) @PostMapping(value = "/force-success") @ResponseStatus(HttpStatus.OK) @ApiException(FORCE_TASK_SUCCESS_ERROR) - public Result forceSingleTaskSuccess(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, + public Result forceTaskSuccess(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName, @RequestParam(value = "taskInstanceId") Integer taskInstanceId) { String userNameReplace = StringUtils.replaceNRTtoUnderline(loginUser.getUserName()); String projectNameReplace = StringUtils.replaceNRTtoUnderline(projectName); logger.info("force task success, login user: {}, project:{}, task instance id:{}", userNameReplace, projectNameReplace, taskInstanceId); - Map result = taskInstanceService.forceSingleTaskSuccess(loginUser, projectName, taskInstanceId); + Map result = taskInstanceService.forceTaskSuccess(loginUser, projectName, taskInstanceId); return returnDataList(result); } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java index b3f810f9b..dd2caff3b 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java @@ -146,14 +146,14 @@ public class TaskInstanceService extends BaseService { } /** - * change one single task instance's state from failure to forced success + * change one task instance's state from failure to forced success * * @param loginUser login user * @param projectName project name * @param taskInstanceId task instance id * @return the result code and msg */ - public Map forceSingleTaskSuccess(User loginUser, String projectName, Integer taskInstanceId) { + public Map forceTaskSuccess(User loginUser, String projectName, Integer taskInstanceId) { Map result = new HashMap<>(5); Project project = projectMapper.queryByName(projectName); @@ -182,8 +182,7 @@ public class TaskInstanceService extends BaseService { int changedNum = taskInstanceMapper.updateById(task); if (changedNum > 0) { putMsg(result, Status.SUCCESS); - } - else { + } else { putMsg(result, Status.FORCE_TASK_SUCCESS_ERROR); } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TaskInstanceControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TaskInstanceControllerTest.java index 00f14f477..6d94f8c18 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TaskInstanceControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/TaskInstanceControllerTest.java @@ -84,14 +84,14 @@ public class TaskInstanceControllerTest extends AbstractControllerTest { } @Test - public void testForceSingleTaskSuccess() throws Exception { + public void testForceTaskSuccess() throws Exception { MultiValueMap paramsMap = new LinkedMultiValueMap<>(); paramsMap.add("taskInstanceId","104"); Map mockResult = new HashMap<>(5); mockResult.put(Constants.STATUS, Status.SUCCESS); mockResult.put(Constants.MSG, Status.SUCCESS.getMsg()); - when(taskInstanceService.forceSingleTaskSuccess(any(User.class), anyString(), anyInt())).thenReturn(mockResult); + when(taskInstanceService.forceTaskSuccess(any(User.class), anyString(), anyInt())).thenReturn(mockResult); MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/task-instance/force-success","test") .header(SESSION_ID, sessionId) diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java index 1c77cc0ed..b1989b4e3 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java @@ -216,7 +216,7 @@ public class TaskInstanceServiceTest { } @Test - public void forceSingleTaskSuccess() { + public void forceTaskSuccess() { User user = getAdminUser(); String projectName = "test"; Project project = getProject(projectName); @@ -231,31 +231,31 @@ public class TaskInstanceServiceTest { Map mockFailure = new HashMap<>(5); putMsg(mockFailure, Status.USER_NO_OPERATION_PROJECT_PERM, user.getUserName(), projectName); when(projectService.checkProjectAndAuth(user, project, projectName)).thenReturn(mockFailure); - Map authFailRes = taskInstanceService.forceSingleTaskSuccess(user, projectName, taskId); + Map authFailRes = taskInstanceService.forceTaskSuccess(user, projectName, taskId); Assert.assertNotSame(Status.SUCCESS, authFailRes.get(Constants.STATUS)); // test task not found when(projectService.checkProjectAndAuth(user, project, projectName)).thenReturn(mockSuccess); when(taskInstanceMapper.selectById(Mockito.anyInt())).thenReturn(null); - Map taskNotFoundRes = taskInstanceService.forceSingleTaskSuccess(user, projectName, taskId); + Map taskNotFoundRes = taskInstanceService.forceTaskSuccess(user, projectName, taskId); Assert.assertEquals(Status.TASK_INSTANCE_NOT_FOUND, taskNotFoundRes.get(Constants.STATUS)); // test task instance state error task.setState(ExecutionStatus.SUCCESS); when(taskInstanceMapper.selectById(1)).thenReturn(task); - Map taskStateErrorRes = taskInstanceService.forceSingleTaskSuccess(user, projectName, taskId); + Map taskStateErrorRes = taskInstanceService.forceTaskSuccess(user, projectName, taskId); Assert.assertEquals(Status.TASK_INSTANCE_STATE_OPERATION_ERROR, taskStateErrorRes.get(Constants.STATUS)); // test error task.setState(ExecutionStatus.FAILURE); when(taskInstanceMapper.updateById(task)).thenReturn(0); - Map errorRes = taskInstanceService.forceSingleTaskSuccess(user, projectName, taskId); + Map errorRes = taskInstanceService.forceTaskSuccess(user, projectName, taskId); Assert.assertEquals(Status.FORCE_TASK_SUCCESS_ERROR, errorRes.get(Constants.STATUS)); // test success task.setState(ExecutionStatus.FAILURE); when(taskInstanceMapper.updateById(task)).thenReturn(1); - Map successRes = taskInstanceService.forceSingleTaskSuccess(user, projectName, taskId); + Map successRes = taskInstanceService.forceTaskSuccess(user, projectName, taskId); Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); } } diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/VarPoolUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/VarPoolUtils.java index 89a8605a9..3d4f65ab5 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/VarPoolUtils.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/VarPoolUtils.java @@ -63,7 +63,7 @@ public class VarPoolUtils { * @throws ParseException ParseException */ public static void convertVarPoolToMap(Map propToValue, String varPool) throws ParseException { - if (varPool == null || propToValue == null) { + if (propToValue == null || StringUtils.isEmpty(varPool)) { return; } String[] splits = varPool.split("\\$VarPool\\$"); diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.java index 6dc38fd29..0ecb65460 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.java @@ -73,11 +73,11 @@ public interface TaskInstanceMapper extends BaseMapper { @Param("endTime") Date endTime ); - List queryTaskByPIdAndStatusAndType(@Param("processInstanceId") Integer processInstanceId, - @Param("states") int[] stateArray, - @Param("taskType") String taskType); + List queryTaskByProcessIdAndStateAndType(@Param("processInstanceId") Integer processInstanceId, + @Param("states") int[] stateArray, + @Param("taskType") String taskType); - List queryTaskBySubProcessTaskIdAndStatusAndType(@Param("subProcessTaskId") Integer subProcessTaskId, - @Param("states") int[] stateArray, - @Param("taskType") String taskType); + List queryTaskBySubProcessTaskIdAndStateAndType(@Param("subProcessTaskId") Integer subProcessTaskId, + @Param("states") int[] stateArray, + @Param("taskType") String taskType); } diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.xml index 0f394fea5..12819fa8f 100644 --- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.xml +++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.xml @@ -152,7 +152,7 @@ order by instance.start_time desc - select id from t_ds_task_instance where process_instance_id = #{processInstanceId} and task_type = #{taskType} @@ -162,7 +162,7 @@ and flag = 1 - select id from t_ds_task_instance where process_instance_id = (select process_instance_id from t_ds_relation_process_instance where parent_task_instance_id = #{subProcessTaskId}) diff --git a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapperTest.java b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapperTest.java index 2c40f0484..aae4a23a8 100644 --- a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapperTest.java +++ b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapperTest.java @@ -320,7 +320,7 @@ public class TaskInstanceMapperTest { } @Test - public void testQueryTaskByPIdAndStatusAndType() { + public void testQueryTaskByProcessIdAndStateAndType() { // insert three task instances with the same process instance id List taskList = new ArrayList<>(); for (int i = 0; i < 3; i++) { @@ -329,7 +329,7 @@ public class TaskInstanceMapperTest { } // test query result - List resultArray = taskInstanceMapper.queryTaskByPIdAndStatusAndType(66, + List resultArray = taskInstanceMapper.queryTaskByProcessIdAndStateAndType(66, new int[] {ExecutionStatus.FAILURE.ordinal(), ExecutionStatus.KILL.ordinal(), ExecutionStatus.NEED_FAULT_TOLERANCE.ordinal()}, TaskType.SUB_PROCESS.toString()); Assert.assertEquals(3, resultArray.size()); @@ -341,7 +341,7 @@ public class TaskInstanceMapperTest { } @Test - public void testQueryTaskBySubProcessTaskIdAndStatusAndType() { + public void testQueryTaskBySubProcessTaskIdAndStateAndType() { TaskInstance parentTask = insertOne("parent-task", 66, ExecutionStatus.FAILURE, TaskType.SUB_PROCESS.toString()); ProcessInstanceMap processInstanceMap = new ProcessInstanceMap(); @@ -354,7 +354,7 @@ public class TaskInstanceMapperTest { TaskInstance subTask2 = insertOne("sub2", 67, ExecutionStatus.FORCED_SUCCESS, TaskType.SHELL.toString()); // test query result - List resultList = taskInstanceMapper.queryTaskBySubProcessTaskIdAndStatusAndType(parentTask.getId(), + List resultList = taskInstanceMapper.queryTaskBySubProcessTaskIdAndStateAndType(parentTask.getId(), new int[] {ExecutionStatus.FORCED_SUCCESS.ordinal()}, null); diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java index a400a7d60..820cfe584 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java @@ -1115,9 +1115,9 @@ public class MasterExecThread implements Runnable { TaskInstance task = readyToSubmitTaskQueue.peek(); // stop tasks which is retrying if forced success happens if (task.taskCanRetry()) { - TaskInstance tmpTask = processService.findTaskInstanceById(task.getId()); - if (tmpTask != null && tmpTask.getState().equals(ExecutionStatus.FORCED_SUCCESS)) { - task.setState(tmpTask.getState()); + TaskInstance retryTask = processService.findTaskInstanceById(task.getId()); + if (retryTask != null && retryTask.getState().equals(ExecutionStatus.FORCED_SUCCESS)) { + task.setState(retryTask.getState()); logger.info("task: {} has been forced success, put it into complete task list and stop retrying", task.getName()); removeTaskFromStandbyList(task); completeTaskList.put(task.getName(), task); diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java index 47069512f..333964b77 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java @@ -1426,7 +1426,7 @@ public class ProcessService { for (int i = 0; i < states.length; i++) { statesArray[i] = states[i].ordinal(); } - return taskInstanceMapper.queryTaskByPIdAndStatusAndType(processInstanceId, statesArray, taskType.toString()); + return taskInstanceMapper.queryTaskByProcessIdAndStateAndType(processInstanceId, statesArray, taskType.toString()); } /** @@ -1443,9 +1443,9 @@ public class ProcessService { statesArray[i] = states[i].ordinal(); } if (taskType == null) { - return taskInstanceMapper.queryTaskBySubProcessTaskIdAndStatusAndType(taskId, statesArray, null); + return taskInstanceMapper.queryTaskBySubProcessTaskIdAndStateAndType(taskId, statesArray, null); } - return taskInstanceMapper.queryTaskBySubProcessTaskIdAndStatusAndType(taskId, statesArray, taskType.toString()); + return taskInstanceMapper.queryTaskBySubProcessTaskIdAndStateAndType(taskId, statesArray, taskType.toString()); } /** diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js index f75949680..9fa776dec 100755 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js @@ -133,6 +133,10 @@ const runningType = [ { desc: `${i18n.$t('Recovery waiting thread')}`, code: 'RECOVER_WAITTING_THREAD' + }, + { + desc: `${i18n.$t('Resume from forced success')}`, + code: 'RESUME_FROM_FORCED_SUCCESS' } ] diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue index 4f7bbccaa..c2ffaa389 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue @@ -79,7 +79,7 @@ - + diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue index 649c8b512..ad16d43b5 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue @@ -116,15 +116,14 @@ this.logDialog = true }, ok () {}, - close () { this.logDialog = false }, - _forceSuccess (item) { this.forceTaskSuccess({ taskInstanceId: item.id }).then(res => { if (res.code === 0) { this.$message.success(res.msg) + setTimeout(this._onUpdate, 1000) } else { this.$message.error(res.msg) } @@ -132,6 +131,9 @@ this.$message.error(e.msg) }) }, + _onUpdate () { + this.$emit('on-update') + }, _go (item) { this.$router.push({ path: `/projects/instance/list/${item.processInstanceId}` }) } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue index c13b69733..0e382ea97 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue @@ -23,7 +23,7 @@