/** * Relock trigger if its lock has expired. * * @param key trigger to lock * @return true when successfully relocked */ public boolean relockExpired(TriggerKey key) { Document existingLock = locksDao.findTriggerLock(key); if (existingLock != null) { if (expiryCalculator.isTriggerLockExpired(existingLock)) { // When a scheduler is defunct then its triggers become expired // after sometime and can be recovered by other schedulers. // To check that a trigger is owned by a defunct scheduler we evaluate // its LOCK_TIME and try to reassign it to this scheduler. // Relock may not be successful when some other scheduler has done // it first. log.info("Trigger {} is expired - re-locking", key); return locksDao.relock(key, existingLock.getDate(Constants.LOCK_TIME)); } else { log.info( "Trigger {} hasn't expired yet. Lock time: {}", key, existingLock.getDate(Constants.LOCK_TIME)); } } else { log.warn( "Error retrieving expired lock from the database for trigger {}. Maybe it was deleted", key); } return false; }