From 7b24efb715235b65342f24def89228ed42a07c17 Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Wed, 28 Dec 2022 14:33:38 +0800 Subject: [PATCH] cherry-pick Fix when update scheduler will execute workflow #13285 --- .../api/controller/SchedulerController.java | 12 ++++++++++-- .../scheduler/quartz/QuartzScheduler.java | 13 ++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java index 33ea065127..47f561bcec 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java @@ -115,9 +115,17 @@ public class SchedulerController extends BaseController { @RequestParam(value = "workerGroup", required = false, defaultValue = "default") String workerGroup, @RequestParam(value = "environmentCode", required = false, defaultValue = "-1") Long environmentCode, @RequestParam(value = "processInstancePriority", required = false, defaultValue = DEFAULT_PROCESS_INSTANCE_PRIORITY) Priority processInstancePriority) { - Map result = schedulerService.insertSchedule(loginUser, projectCode, processDefinitionCode, + Map result = schedulerService.insertSchedule( + loginUser, + projectCode, + processDefinitionCode, schedule, - warningType, warningGroupId, failureStrategy, processInstancePriority, workerGroup, environmentCode); + warningType, + warningGroupId, + failureStrategy, + processInstancePriority, + workerGroup, + environmentCode); return returnDataList(result); } diff --git a/dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java b/dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java index 1025a2918f..3750206a55 100644 --- a/dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java +++ b/dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java @@ -77,6 +77,14 @@ public class QuartzScheduler implements SchedulerApi { */ Date startDate = DateUtils.transformTimezoneDate(schedule.getStartTime(), timezoneId); Date endDate = DateUtils.transformTimezoneDate(schedule.getEndTime(), timezoneId); + /** + * If the start time is less than the current time, the start time is set to the current time. + * We do this change to avoid misfires all triggers when update the scheduler. + */ + Date now = new Date(); + if (startDate.before(now)) { + startDate = now; + } lock.writeLock().lock(); try { @@ -111,9 +119,8 @@ public class QuartzScheduler implements SchedulerApi { .endAt(endDate) .withSchedule( cronSchedule(cronExpression) - .withMisfireHandlingInstructionDoNothing() - .inTimeZone(DateUtils.getTimezone(timezoneId)) - ) + .withMisfireHandlingInstructionIgnoreMisfires() + .inTimeZone(DateUtils.getTimezone(timezoneId))) .forJob(jobDetail).build(); if (scheduler.checkExists(triggerKey)) {