diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java index 1a744ea6dda7f75628593cdf12ebc5c5ee6becf2..8929c6b5f2d145ff5a7d4c5049a5d12d69ec1e9c 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/utils/DependentExecute.java @@ -185,23 +185,45 @@ public class DependentExecute { */ private ProcessInstance findLastProcessInterval(Long definitionCode, DateInterval dateInterval) { - ProcessInstance runningProcess = processService.findLastRunningProcess(definitionCode, dateInterval.getStartTime(), dateInterval.getEndTime()); - if (runningProcess != null) { - return runningProcess; - } - - ProcessInstance lastSchedulerProcess = processService.findLastSchedulerProcessInterval(definitionCode, dateInterval); + /** + * Find the last manual/schedule processInstance. + * Return the nonnull one first. + * Return the finished one first. + * Return the start later one first. + * Return the manual one first. + */ + ProcessInstance lastSchedulerProcess = + processService.findLastSchedulerProcessInterval(definitionCode, dateInterval); ProcessInstance lastManualProcess = processService.findLastManualProcessInterval(definitionCode, dateInterval); + if (lastManualProcess == null && lastSchedulerProcess == null) { + return null; + } + if (lastManualProcess == null) { return lastSchedulerProcess; } + if (lastSchedulerProcess == null) { return lastManualProcess; } - return (lastManualProcess.getEndTime().after(lastSchedulerProcess.getEndTime())) ? lastManualProcess : lastSchedulerProcess; + if (lastManualProcess.getEndTime() == null && lastSchedulerProcess.getEndTime() == null) { + return lastManualProcess.getStartTime().after(lastSchedulerProcess.getStartTime()) ? lastManualProcess + : lastSchedulerProcess; + } + + if (lastSchedulerProcess.getEndTime() == null) { + return lastManualProcess; + } + + if (lastManualProcess.getEndTime() == null) { + return lastSchedulerProcess; + } + + return (lastManualProcess.getEndTime().after(lastSchedulerProcess.getEndTime())) ? lastManualProcess + : lastSchedulerProcess; } /**