Scheduled Tasks
We use following code to send pending reminders. This code is triggered at 5 minutes intervals. We use cluster locks to ensure that only one instance of this task is running and if a new tasks is triggered before the previous task finished we simply skip new task. Worst case scenario is sending a reminder will be delayed 5 more minutes.
if (this.sendingReminders) { log.warn("The add-on received a send pending reminders request while already processing reminders. You may be sending too many reminders, for example you may sending a reminder to large jira user group"); return; } log.debug("Acquiring cluster lock for sending reminders"); ClusterLock lock = clusterLockService.getLockForName(ReminderServiceImp.class.getName() + ".SendPendingReminders"); boolean lockAcquired = lock.tryLock(); if (!lockAcquired) { log.warn("Previous instance still running"); return; } log.debug("Acquired cluster lock for sending reminders"); try { sendPendingRemindersImp(); } catch (Exception e) { log.error("Can't send pending reminders", e); } finally { this.sendingReminders = false; log.debug("Releasing cluster lock for sending reminders"); lock.unlock(); }