Skip to content

Commit

Permalink
Fix unscheduling actions when the trigger name changed after retry
Browse files Browse the repository at this point in the history
  • Loading branch information
wweellddeerr committed Oct 3, 2023
1 parent 39f76bd commit 7c6aa16
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
15 changes: 12 additions & 3 deletions java/code/src/com/redhat/rhn/taskomatic/TaskoQuartzHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down
19 changes: 16 additions & 3 deletions java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<TaskoSchedule> 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
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Fix unscheduling actions when the trigger name changed after retry (bsc#1214121)

0 comments on commit 7c6aa16

Please sign in to comment.