Repository: incubator-fineract Updated Branches: refs/heads/develop f96d96a14 -> 6f25da56e
FINERACT-145 Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/6f25da56 Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/6f25da56 Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/6f25da56 Branch: refs/heads/develop Commit: 6f25da56eaf3370728a6858d89ea7f81bcb6fa51 Parents: f96d96a Author: Nazeer Hussain Shaik <nazeer.sh...@confluxtechnologies.com> Authored: Tue May 31 12:48:51 2016 +0530 Committer: Nazeer Hussain Shaik <nazeer.sh...@confluxtechnologies.com> Committed: Tue May 31 12:48:51 2016 +0530 ---------------------------------------------------------------------- .../jobs/service/SchedulerTriggerListener.java | 28 +++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/6f25da56/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java index 90a1e1e..b5a1c4b 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.jobs.service; +import java.util.Random; + import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.security.service.TenantDetailsService; @@ -26,12 +28,16 @@ import org.quartz.JobKey; import org.quartz.Trigger; import org.quartz.Trigger.CompletedExecutionInstruction; import org.quartz.TriggerListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class SchedulerTriggerListener implements TriggerListener { + private final static Logger logger = LoggerFactory.getLogger(SchedulerTriggerListener.class); + private final String name = "Global trigger Listner"; private final SchedularWritePlatformService schedularService; @@ -68,7 +74,27 @@ public class SchedulerTriggerListener implements TriggerListener { if (context.getMergedJobDataMap().containsKey(SchedulerServiceConstants.TRIGGER_TYPE_REFERENCE)) { triggerType = context.getMergedJobDataMap().getString(SchedulerServiceConstants.TRIGGER_TYPE_REFERENCE); } - return this.schedularService.processJobDetailForExecution(jobKey, triggerType); + Integer maxNumberOfRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxRetriesOnDeadlock(); + Integer maxIntervalBetweenRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxIntervalBetweenRetries(); + Integer numberOfRetries = 0; + boolean proceedJob = false; + while (numberOfRetries <= maxNumberOfRetries) { + try { + proceedJob = this.schedularService.processJobDetailForExecution(jobKey, triggerType); + numberOfRetries = maxNumberOfRetries + 1; + } catch (Exception exception) { //Adding generic exception as it depends on JPA provider + logger.debug("Not able to acquire the lock to update job running status for JobKey: " + jobKey); + try { + Random random = new Random(); + int randomNum = random.nextInt(maxIntervalBetweenRetries + 1); + Thread.sleep(1000 + (randomNum * 1000)); + numberOfRetries = numberOfRetries + 1; + } catch (InterruptedException e) { + + } + } + } + return proceedJob; } @Override