diff --git a/grails-app/services/grails/plugins/jesque/JesqueSchedulerService.groovy b/grails-app/services/grails/plugins/jesque/JesqueSchedulerService.groovy index 88bb65b..7166e28 100644 --- a/grails-app/services/grails/plugins/jesque/JesqueSchedulerService.groovy +++ b/grails-app/services/grails/plugins/jesque/JesqueSchedulerService.groovy @@ -104,10 +104,6 @@ class JesqueSchedulerService { if (!waitingJobs) return [] - //only get and wait for jobs with the exact time until something like quartz batchTimeWindow is implemented - def earliestWaitingJobTime = waitingJobs.min { it.score }.score - waitingJobs.findAll { it.score == earliestWaitingJobTime } - //lock jobs waitingJobs.inject([]) { List acquiredJobs, Tuple jobData -> String jobName = jobData.element @@ -120,6 +116,12 @@ class JesqueSchedulerService { return acquiredJobs } + if (jobData.score != trigger.nextFireTime.millis) { + log.debug "Trigger nextFireTime has been changed: job $jobName was already executed by another thread" + redis.unwatch() + return acquiredJobs + } + trigger.state = TriggerState.Acquired trigger.acquiredBy = hostName Transaction transaction = redis.multi()