@ -16,7 +16,7 @@
* /
package org.apache.dolphinscheduler.server.master.runner ;
import com.alibaba.fastjson.JSONObject ;
import com.alibaba.fastjson.JSON ;
import com.google.common.collect.Lists ;
import org.apache.commons.io.FileUtils ;
import org.apache.dolphinscheduler.common.Constants ;
@ -68,7 +68,7 @@ public class MasterExecThread implements Runnable {
/ * *
* runing TaskNode
* /
private final Map < MasterBaseTaskExecThread , Future < Boolean > > activeTaskNode = new ConcurrentHashMap < MasterBaseTaskExecThread , Future < Boolean > > ( ) ;
private final Map < MasterBaseTaskExecThread , Future < Boolean > > activeTaskNode = new ConcurrentHashMap < > ( ) ;
/ * *
* task exec service
@ -78,7 +78,7 @@ public class MasterExecThread implements Runnable {
/ * *
* submit failure nodes
* /
private B oolean taskFailedSubmit = false ;
private b oolean taskFailedSubmit = false ;
/ * *
* recover node id list
@ -454,7 +454,7 @@ public class MasterExecThread implements Runnable {
// process instance id
taskInstance . setProcessInstanceId ( processInstance . getId ( ) ) ;
// task instance node json
taskInstance . setTaskJson ( JSONObject . toJSONString ( taskNode ) ) ;
taskInstance . setTaskJson ( JSON . toJSONString ( taskNode ) ) ;
// task instance type
taskInstance . setTaskType ( taskNode . getType ( ) ) ;
// task instance whether alert
@ -652,7 +652,7 @@ public class MasterExecThread implements Runnable {
continue ;
}
if ( task . getState ( ) . typeIsPause ( ) | | task . getState ( ) . typeIsCancel ( ) ) {
logger . info ( "task {} stopped, the state is {}" , task . getName ( ) , task . getState ( ) . toString ( ) ) ;
logger . info ( "task {} stopped, the state is {}" , task . getName ( ) , task . getState ( ) ) ;
} else {
addTaskToStandByList ( task ) ;
}
@ -685,11 +685,12 @@ public class MasterExecThread implements Runnable {
}
ExecutionStatus depTaskState = completeTaskList . get ( depsNode ) . getState ( ) ;
// conditions task would not return failed.
if ( depTaskState . typeIsFailure ( ) ) {
if ( ! haveConditionsAfterNode ( depsNode ) & & ! dag . getNode ( depsNode ) . isConditionsTask ( ) ) {
if ( depTaskState . typeIsFailure ( )
& & ! haveConditionsAfterNode ( depsNode )
& & ! dag . getNode ( depsNode ) . isConditionsTask ( ) ) {
return DependResult . FAILED ;
}
}
if ( depTaskState . typeIsPause ( ) | | depTaskState . typeIsCancel ( ) ) {
return DependResult . WAITING ;
}
@ -737,7 +738,7 @@ public class MasterExecThread implements Runnable {
*
* @return Boolean whether has failed task
* /
private B oolean hasFailedTask ( ) {
private b oolean hasFailedTask ( ) {
if ( this . taskFailedSubmit ) {
return true ;
@ -753,7 +754,7 @@ public class MasterExecThread implements Runnable {
*
* @return Boolean whether process instance failed
* /
private B oolean processFailed ( ) {
private b oolean processFailed ( ) {
if ( hasFailedTask ( ) ) {
if ( processInstance . getFailureStrategy ( ) = = FailureStrategy . END ) {
return true ;
@ -769,9 +770,9 @@ public class MasterExecThread implements Runnable {
* whether task for waiting thread
* @return Boolean whether has waiting thread task
* /
private B oolean hasWaitingThreadTask ( ) {
private b oolean hasWaitingThreadTask ( ) {
List < TaskInstance > waitingList = getCompleteTaskByState ( ExecutionStatus . WAITTING_THREAD ) ;
return waitingList . size ( ) > 0 ;
return CollectionUtils . isNotEmpty ( waitingList ) ;
}
/ * *
@ -787,7 +788,7 @@ public class MasterExecThread implements Runnable {
}
List < TaskInstance > pauseList = getCompleteTaskByState ( ExecutionStatus . PAUSE ) ;
if ( pauseList . size ( ) > 0
if ( CollectionUtils . isNotEmpty ( pauseList )
| | ! isComplementEnd ( )
| | readyToSubmitTaskList . size ( ) > 0 ) {
return ExecutionStatus . PAUSE ;
@ -827,7 +828,8 @@ public class MasterExecThread implements Runnable {
if ( state = = ExecutionStatus . READY_STOP ) {
List < TaskInstance > stopList = getCompleteTaskByState ( ExecutionStatus . STOP ) ;
List < TaskInstance > killList = getCompleteTaskByState ( ExecutionStatus . KILL ) ;
if ( stopList . size ( ) > 0 | | killList . size ( ) > 0 | | ! isComplementEnd ( ) ) {
if ( CollectionUtils . isNotEmpty ( stopList )
| | CollectionUtils . isNotEmpty ( killList ) | | ! isComplementEnd ( ) ) {
return ExecutionStatus . STOP ;
} else {
return ExecutionStatus . SUCCESS ;
@ -852,7 +854,7 @@ public class MasterExecThread implements Runnable {
* whether complement end
* @return Boolean whether is complement end
* /
private B oolean isComplementEnd ( ) {
private b oolean isComplementEnd ( ) {
if ( ! processInstance . isComplementData ( ) ) {
return true ;
}
@ -877,8 +879,8 @@ public class MasterExecThread implements Runnable {
logger . info (
"work flow process instance [id: {}, name:{}], state change from {} to {}, cmd type: {}" ,
processInstance . getId ( ) , processInstance . getName ( ) ,
processInstance . getState ( ) . toString ( ) , state . toString ( ) ,
processInstance . getCommandType ( ) . toString ( ) ) ;
processInstance . getState ( ) , state ,
processInstance . getCommandType ( ) ) ;
processInstance . setState ( state ) ;
ProcessInstance instance = processService . findProcessInstanceById ( processInstance . getId ( ) ) ;
instance . setState ( state ) ;
@ -894,8 +896,7 @@ public class MasterExecThread implements Runnable {
* @return DependResult
* /
private DependResult getDependResultForTask ( TaskInstance taskInstance ) {
DependResult inner = isTaskDepsComplete ( taskInstance . getName ( ) ) ;
return inner ;
return isTaskDepsComplete ( taskInstance . getName ( ) ) ;
}
/ * *
@ -920,7 +921,7 @@ public class MasterExecThread implements Runnable {
* has retry task in standby
* @return Boolean whether has retry task in standby
* /
private B oolean hasRetryTaskInStandBy ( ) {
private b oolean hasRetryTaskInStandBy ( ) {
for ( Map . Entry < String , TaskInstance > entry : readyToSubmitTaskList . entrySet ( ) ) {
if ( entry . getValue ( ) . getState ( ) . typeIsFailure ( ) ) {
return true ;
@ -958,7 +959,7 @@ public class MasterExecThread implements Runnable {
continue ;
}
logger . info ( "task :{}, id:{} complete, state is {} " ,
task . getName ( ) , task . getId ( ) , task . getState ( ) . toString ( ) ) ;
task . getName ( ) , task . getId ( ) , task . getState ( ) ) ;
// node success , post node submit
if ( task . getState ( ) = = ExecutionStatus . SUCCESS ) {
completeTaskList . put ( task . getName ( ) , task ) ;
@ -990,7 +991,7 @@ public class MasterExecThread implements Runnable {
completeTaskList . put ( task . getName ( ) , task ) ;
}
// send alert
if ( this . recoverToleranceFaultTaskList . size ( ) > 0 ) {
if ( CollectionUtils . isNotEmpty ( this . recoverToleranceFaultTaskList ) ) {
alertManager . sendAlertWorkerToleranceFault ( processInstance , recoverToleranceFaultTaskList ) ;
this . recoverToleranceFaultTaskList . clear ( ) ;
}
@ -1034,10 +1035,7 @@ public class MasterExecThread implements Runnable {
Date now = new Date ( ) ;
long runningTime = DateUtils . diffMin ( now , processInstance . getStartTime ( ) ) ;
if ( runningTime > processInstance . getTimeout ( ) ) {
return true ;
}
return false ;
return runningTime > processInstance . getTimeout ( ) ;
}
/ * *
@ -1062,7 +1060,7 @@ public class MasterExecThread implements Runnable {
TaskInstance taskInstance = taskExecThread . getTaskInstance ( ) ;
taskInstance = processService . findTaskInstanceById ( taskInstance . getId ( ) ) ;
if ( taskInstance . getState ( ) . typeIsFinished ( ) ) {
if ( taskInstance ! = null & & taskInstance . getState ( ) . typeIsFinished ( ) ) {
continue ;
}
@ -1081,22 +1079,19 @@ public class MasterExecThread implements Runnable {
* @param taskInstance task instance
* @return Boolean
* /
private B oolean retryTaskIntervalOverTime ( TaskInstance taskInstance ) {
private b oolean retryTaskIntervalOverTime ( TaskInstance taskInstance ) {
if ( taskInstance . getState ( ) ! = ExecutionStatus . FAILURE ) {
return Boolean . TRUE ;
return true ;
}
if ( taskInstance . getId ( ) = = 0 | |
taskInstance . getMaxRetryTimes ( ) = = 0 | |
taskInstance . getRetryInterval ( ) = = 0 ) {
return Boolean . TRUE ;
return true ;
}
Date now = new Date ( ) ;
long failedTimeInterval = DateUtils . differSec ( now , taskInstance . getEndTime ( ) ) ;
// task retry does not over time, return false
if ( taskInstance . getRetryInterval ( ) * SEC_2_MINUTES_TIME_UNIT > = failedTimeInterval ) {
return Boolean . FALSE ;
}
return Boolean . TRUE ;
return taskInstance . getRetryInterval ( ) * SEC_2_MINUTES_TIME_UNIT < failedTimeInterval ;
}
/ * *
@ -1189,7 +1184,7 @@ public class MasterExecThread implements Runnable {
* /
private List < String > getRecoveryNodeNameList ( ) {
List < String > recoveryNodeNameList = new ArrayList < > ( ) ;
if ( recoverNodeIdList . size ( ) > 0 ) {
if ( CollectionUtils . isNotEmpty ( recoverNodeIdList ) ) {
for ( TaskInstance task : recoverNodeIdList ) {
recoveryNodeNameList . add ( task . getName ( ) ) ;
}