Skip to content

Commit 7da02fb

Browse files
committed
SchedulerAccessor catches cluster race conditions on job rescheduling
Issue: SPR-17114 (cherry picked from commit fa97aab)
1 parent 92c2102 commit 7da02fb

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerAccessor.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2014 the original author or authors.
2+
* Copyright 2002-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -131,7 +131,7 @@ public void setJobDetails(JobDetail... jobDetails) {
131131
/**
132132
* Register a list of Quartz Calendar objects with the Scheduler
133133
* that this FactoryBean creates, to be referenced by Triggers.
134-
* @param calendars Map with calendar names as keys as Calendar
134+
* @param calendars a Map with calendar names as keys as Calendar
135135
* objects as values
136136
* @see org.quartz.Calendar
137137
*/
@@ -299,7 +299,15 @@ private boolean addTriggerToScheduler(Trigger trigger) throws SchedulerException
299299
if (jobDetail != null && !this.jobDetails.contains(jobDetail) && addJobToScheduler(jobDetail)) {
300300
this.jobDetails.add(jobDetail);
301301
}
302-
getScheduler().rescheduleJob(trigger.getKey(), trigger);
302+
try {
303+
getScheduler().rescheduleJob(trigger.getKey(), trigger);
304+
}
305+
catch (ObjectAlreadyExistsException ex) {
306+
if (logger.isDebugEnabled()) {
307+
logger.debug("Unexpectedly encountered existing trigger on rescheduling, assumably due to " +
308+
"cluster race condition: " + ex.getMessage() + " - can safely be ignored");
309+
}
310+
}
303311
}
304312
else {
305313
try {
@@ -314,8 +322,8 @@ private boolean addTriggerToScheduler(Trigger trigger) throws SchedulerException
314322
}
315323
catch (ObjectAlreadyExistsException ex) {
316324
if (logger.isDebugEnabled()) {
317-
logger.debug("Unexpectedly found existing trigger, assumably due to cluster race condition: " +
318-
ex.getMessage() + " - can safely be ignored");
325+
logger.debug("Unexpectedly encountered existing trigger on job scheduling, assumably due to " +
326+
"cluster race condition: " + ex.getMessage() + " - can safely be ignored");
319327
}
320328
if (this.overwriteExistingJobs) {
321329
getScheduler().rescheduleJob(trigger.getKey(), trigger);

0 commit comments

Comments
 (0)