You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by GitBox <gi...@apache.org> on 2020/12/21 03:52:28 UTC

[GitHub] [incubator-dolphinscheduler] ATat5 opened a new issue #4275: [Bug]For a process that is executing a failed retry task, stopping it will change the status to success

ATat5 opened a new issue #4275:
URL: https://github.com/apache/incubator-dolphinscheduler/issues/4275


   **Describe the bug**
   
   A task in process B depends on process A, and the dependent task supports failed retry
   
   When process A fails to execute, process B is executing the failed retry task
   
   At this time, if process B is ready to pause, the process status will be changed to failed
   
   While process B is ready to stop, the process status is changed to success
   
   **Expected behavior**
   
   I think that when process B is stopped, the process status should also be changed to failed.
   
   **Additional context**
   
   In the method runProcess(), the failed retry task will not be put into the completeTaskList. If the process is ready to stop, the failed retry task will be skipped, and update the process status to success. 
   
   However, if the process is ready to pause, the method hasRetryTaskInStandBy() is used to judge whether the failed retry task is included, and if it exists, it will be regarded as a failure.
   
   
   
   ```java
   private void runProcess() {
               ......
               // node fails, retry first, and then execute the failure process
               if (task.getState().typeIsFailure()) {
                   if (task.getState() == ExecutionStatus.NEED_FAULT_TOLERANCE) {
                       this.recoverToleranceFaultTaskList.add(task);
                   }
                   if (task.taskCanRetry()) {
                       addTaskToStandByList(task);
                   } else {
                       completeTaskList.put(task.getName(), task);
                       if (task.isConditionsTask()
                               || DagHelper.haveConditionsAfterNode(task.getName(), dag)) {
                           submitPostNode(task.getName());
                       } else {
                           errorTaskList.put(task.getName(), task);
                           if (processInstance.getFailureStrategy() == FailureStrategy.END) {
                               killTheOtherTasks();
                           }
                       }
                   }
                   continue;
               }
   ```
   
   ```java
   private void updateProcessInstanceState() {
           ExecutionStatus state = getProcessInstanceState();
           if (processInstance.getState() != state) {
   ```
   
   ```java
   private ExecutionStatus getProcessInstanceState() {
       ......
   
       // pause
       if (state == ExecutionStatus.READY_PAUSE) {
           return processReadyPause();
       }
   
       // stop
       if (state == ExecutionStatus.READY_STOP) {
           List<TaskInstance> stopList = getCompleteTaskByState(ExecutionStatus.STOP);
           List<TaskInstance> killList = getCompleteTaskByState(ExecutionStatus.KILL);
           if (CollectionUtils.isNotEmpty(stopList)
                   || CollectionUtils.isNotEmpty(killList)
                   || !isComplementEnd()) {
               return ExecutionStatus.STOP;
           } else {
               return ExecutionStatus.SUCCESS;
           }
       }
   ```
   
   ```java
   private ExecutionStatus processReadyPause() {
       if (hasRetryTaskInStandBy()) {
           return ExecutionStatus.FAILURE;
       }
   
       List<TaskInstance> pauseList = getCompleteTaskByState(ExecutionStatus.PAUSE);
       if (CollectionUtils.isNotEmpty(pauseList)
               || !isComplementEnd()
               || readyToSubmitTaskList.size() > 0) {
           return ExecutionStatus.PAUSE;
       } else {
           return ExecutionStatus.SUCCESS;
       }
   }
   ```
   
   
   
   **Which version of Dolphin Scheduler:**
   -[1.2.0]


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org