diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoQuartzHelper.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoQuartzHelper.java index bfcf1696d800..cb927b051388 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoQuartzHelper.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoQuartzHelper.java @@ -180,12 +180,21 @@ public static Date rescheduleJob(TaskoSchedule schedule, Instant startAtDate) th * @param jobLabel job name */ public static void destroyJob(Integer orgId, String jobLabel) { + destroyJob(triggerKey(jobLabel, getGroupName(orgId))); + } + + /** + * unschedules job + * + * @param key trigger key + */ + public static void destroyJob(TriggerKey key) { try { - SchedulerKernel.getScheduler().unscheduleJob(triggerKey(jobLabel, getGroupName(orgId))); - log.info("Job {} unscheduled successfully.", jobLabel); + SchedulerKernel.getScheduler().unscheduleJob(key); + log.info("Job {} unscheduled successfully.", key.getName()); } catch (SchedulerException e) { - log.error("Unable to unschedule job {} of organization # {}", jobLabel, orgId, e); + log.error("Unable to unschedule job {} of organization # {}", key.getName(), key.getGroup(), e); } } diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java index 947a5c8c0d43..147ab194a2b0 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java @@ -30,6 +30,8 @@ import org.apache.logging.log4j.Logger; import org.quartz.SchedulerException; import org.quartz.Trigger; +import org.quartz.TriggerKey; +import org.quartz.impl.matchers.GroupMatcher; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -213,13 +215,24 @@ private TaskoBunch doBasicCheck(Integer orgId, String bunchName, String jobLabel public Integer unscheduleBunch(Integer orgId, String jobLabel) { // one or none shall be returned List scheduleList = TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel); + TriggerKey triggerKey; Trigger trigger; try { - trigger = SchedulerKernel.getScheduler().getTrigger(triggerKey(jobLabel, - TaskoQuartzHelper.getGroupName(orgId))); + triggerKey = triggerKey(jobLabel, TaskoQuartzHelper.getGroupName(orgId)); + trigger = SchedulerKernel.getScheduler().getTrigger(triggerKey); + + // Try to find retry triggers as fallback + if (trigger == null) { + triggerKey = SchedulerKernel.getScheduler() + .getTriggerKeys(GroupMatcher.anyGroup()).stream() + .filter(it -> it.getName().startsWith(jobLabel + "-retry")) + .findFirst().orElse(null); + trigger = SchedulerKernel.getScheduler().getTrigger(triggerKey); + } } catch (SchedulerException e) { trigger = null; + triggerKey = null; } // check for inconsistencies // quartz unschedules job after trigger end time @@ -232,7 +245,7 @@ public Integer unscheduleBunch(Integer orgId, String jobLabel) { schedule.unschedule(); } if (trigger != null) { - TaskoQuartzHelper.destroyJob(orgId, jobLabel); + TaskoQuartzHelper.destroyJob(triggerKey); } return 1; } diff --git a/java/spacewalk-java.changes.welder.fix-unscheduling-retry-trigger b/java/spacewalk-java.changes.welder.fix-unscheduling-retry-trigger new file mode 100644 index 000000000000..0f9e441ea436 --- /dev/null +++ b/java/spacewalk-java.changes.welder.fix-unscheduling-retry-trigger @@ -0,0 +1 @@ +- Fix unscheduling actions when the trigger name changed after retry (bsc#1214121)