mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-11-29 18:58:05 +08:00
[Improvement][Master] Calculate the remainTime then we set the delay execution. (#15012)
* [#15007][fix][worker-server] fix bug task delay execution * [#15007][fix][worker-server] fix bug task delay execution mvn spotless:apply * [#15007][fix][worker-server] fix bug task delay execution worker fix task delay logic --------- Co-authored-by: 旺阳 <wang@lqwang.net>
This commit is contained in:
parent
23b2c8a532
commit
d683553324
@ -62,19 +62,23 @@ public class LogicITaskInstanceDispatchOperationFunction
|
||||
LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath());
|
||||
|
||||
MasterTaskExecutionContextHolder.putTaskExecutionContext(taskExecutionContext);
|
||||
// todo: calculate the delay in master dispatcher then we don't need to use a queue to store the task
|
||||
final long remainTime =
|
||||
DateUtils.getRemainTime(DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
|
||||
TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()));
|
||||
if (remainTime > 0) {
|
||||
log.info("Current taskInstance: {} is choosing delay execution, delay time: {}/ms, remainTime: {}/ms",
|
||||
taskExecutionContext.getTaskName(),
|
||||
TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()), remainTime);
|
||||
taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
|
||||
// todo: send delay execution message
|
||||
return LogicTaskDispatchResponse.success(taskExecutionContext.getTaskInstanceId());
|
||||
}
|
||||
|
||||
int delayTime = taskExecutionContext.getDelayTime();
|
||||
if (delayTime > 0) {
|
||||
// todo: calculate the delay in master dispatcher then we don't need to use a queue to store the task
|
||||
final long remainTime =
|
||||
DateUtils.getRemainTime(DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
|
||||
TimeUnit.SECONDS.toMillis(delayTime));
|
||||
if (remainTime > 0) {
|
||||
log.info(
|
||||
"Current taskInstance: {} is choosing delay execution, delay time: {}/ms, remainTime: {}/ms",
|
||||
taskExecutionContext.getTaskName(),
|
||||
TimeUnit.SECONDS.toMillis(taskExecutionContext.getDelayTime()), remainTime);
|
||||
taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
|
||||
// todo: send delay execution message
|
||||
return LogicTaskDispatchResponse.success(taskExecutionContext.getTaskInstanceId());
|
||||
}
|
||||
}
|
||||
final MasterDelayTaskExecuteRunnable masterDelayTaskExecuteRunnable =
|
||||
masterTaskExecuteRunnableFactoryBuilder
|
||||
.createWorkerDelayTaskExecuteRunnableFactory(taskExecutionContext.getTaskType())
|
||||
|
@ -75,16 +75,21 @@ public class GlobalTaskInstanceDispatchQueueLooper extends BaseDaemonThread {
|
||||
TaskExecutionContext taskExecutionContext = globalTaskInstanceDispatchQueue.take();
|
||||
LogUtils.setTaskInstanceLogFullPathMDC(taskExecutionContext.getLogPath());
|
||||
LogUtils.setTaskInstanceIdMDC(taskExecutionContext.getTaskInstanceId());
|
||||
// delay task process
|
||||
long remainTime =
|
||||
DateUtils.getRemainTime(DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
|
||||
taskExecutionContext.getDelayTime() * 60L);
|
||||
if (remainTime > 0) {
|
||||
log.info("Current taskInstance is choose delay execution, delay time: {}s", remainTime);
|
||||
taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
|
||||
// todo: use delay running event
|
||||
workerMessageSender.sendMessage(taskExecutionContext,
|
||||
ITaskInstanceExecutionEvent.TaskInstanceExecutionEventType.FINISH);
|
||||
|
||||
int delayTime = taskExecutionContext.getDelayTime();
|
||||
if (delayTime > 0) {
|
||||
// delay task process
|
||||
long remainTime =
|
||||
DateUtils.getRemainTime(
|
||||
DateUtils.timeStampToDate(taskExecutionContext.getFirstSubmitTime()),
|
||||
delayTime * 60L);
|
||||
if (remainTime > 0) {
|
||||
log.info("Current taskInstance is choose delay execution, delay time: {}s", remainTime);
|
||||
taskExecutionContext.setCurrentExecutionStatus(TaskExecutionStatus.DELAY_EXECUTION);
|
||||
// todo: use delay running event
|
||||
workerMessageSender.sendMessage(taskExecutionContext,
|
||||
ITaskInstanceExecutionEvent.TaskInstanceExecutionEventType.FINISH);
|
||||
}
|
||||
}
|
||||
WorkerDelayTaskExecuteRunnable workerTaskExecuteRunnable = WorkerTaskExecuteRunnableFactoryBuilder
|
||||
.createWorkerDelayTaskExecuteRunnableFactory(
|
||||
|
Loading…
Reference in New Issue
Block a user