improve logging in SchedulerTriggerListener (re. FINERACT-922) (#812)
This commit is contained in:
+19
-21
@@ -37,10 +37,7 @@ public class SchedulerTriggerListener implements TriggerListener {
|
|||||||
|
|
||||||
private final static Logger logger = LoggerFactory.getLogger(SchedulerTriggerListener.class);
|
private final static Logger logger = LoggerFactory.getLogger(SchedulerTriggerListener.class);
|
||||||
|
|
||||||
private final String name = "Global trigger Listner";
|
|
||||||
|
|
||||||
private final SchedularWritePlatformService schedularService;
|
private final SchedularWritePlatformService schedularService;
|
||||||
|
|
||||||
private final TenantDetailsService tenantDetailsService;
|
private final TenantDetailsService tenantDetailsService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -52,18 +49,16 @@ public class SchedulerTriggerListener implements TriggerListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return this.name;
|
return "Fineract Global Scheduler Trigger Listener";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void triggerFired(@SuppressWarnings("unused") final Trigger trigger,
|
public void triggerFired(Trigger trigger, JobExecutionContext context) {
|
||||||
@SuppressWarnings("unused") final JobExecutionContext context) {
|
logger.debug("triggerFired() trigger={}, context={}", trigger, context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean vetoJobExecution(final Trigger trigger, final JobExecutionContext context) {
|
public boolean vetoJobExecution(final Trigger trigger, final JobExecutionContext context) {
|
||||||
|
|
||||||
final String tenantIdentifier = trigger.getJobDataMap().getString(SchedulerServiceConstants.TENANT_IDENTIFIER);
|
final String tenantIdentifier = trigger.getJobDataMap().getString(SchedulerServiceConstants.TENANT_IDENTIFIER);
|
||||||
final FineractPlatformTenant tenant = this.tenantDetailsService.loadTenantById(tenantIdentifier);
|
final FineractPlatformTenant tenant = this.tenantDetailsService.loadTenantById(tenantIdentifier);
|
||||||
ThreadLocalContextUtil.setTenant(tenant);
|
ThreadLocalContextUtil.setTenant(tenant);
|
||||||
@@ -76,36 +71,39 @@ public class SchedulerTriggerListener implements TriggerListener {
|
|||||||
Integer maxNumberOfRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxRetriesOnDeadlock();
|
Integer maxNumberOfRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxRetriesOnDeadlock();
|
||||||
Integer maxIntervalBetweenRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxIntervalBetweenRetries();
|
Integer maxIntervalBetweenRetries = ThreadLocalContextUtil.getTenant().getConnection().getMaxIntervalBetweenRetries();
|
||||||
Integer numberOfRetries = 0;
|
Integer numberOfRetries = 0;
|
||||||
boolean proceedJob = false;
|
boolean vetoJob = false;
|
||||||
while (numberOfRetries <= maxNumberOfRetries) {
|
while (numberOfRetries <= maxNumberOfRetries) {
|
||||||
try {
|
try {
|
||||||
proceedJob = this.schedularService.processJobDetailForExecution(jobKey, triggerType);
|
vetoJob = this.schedularService.processJobDetailForExecution(jobKey, triggerType);
|
||||||
numberOfRetries = maxNumberOfRetries + 1;
|
numberOfRetries = maxNumberOfRetries + 1;
|
||||||
} catch (Exception exception) { //Adding generic exception as it depends on JPA provider
|
} 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);
|
logger.warn("vetoJobExecution() not able to acquire the lock to update job running status at retry {} (of {}) for JobKey: {}",
|
||||||
|
numberOfRetries, maxNumberOfRetries, jobKey, exception);
|
||||||
try {
|
try {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
int randomNum = random.nextInt(maxIntervalBetweenRetries + 1);
|
int randomNum = random.nextInt(maxIntervalBetweenRetries + 1);
|
||||||
Thread.sleep(1000 + (randomNum * 1000));
|
Thread.sleep(1000 + (randomNum * 1000));
|
||||||
numberOfRetries = numberOfRetries + 1;
|
numberOfRetries = numberOfRetries + 1;
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
|
logger.error("vetoJobExecution() caught an InterruptedException", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return proceedJob;
|
if (vetoJob) {
|
||||||
|
logger.warn("vetoJobExecution() WILL veto the execution (returning vetoJob == true; the job's execute method will NOT be called); "
|
||||||
|
+ "maxNumberOfRetries={}, tenant={}, jobKey={}, triggerType={}, trigger={}, context={}",
|
||||||
|
maxNumberOfRetries, tenantIdentifier, jobKey, triggerType, trigger, context);
|
||||||
|
}
|
||||||
|
return vetoJob;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void triggerMisfired(@SuppressWarnings("unused") final Trigger trigger) {
|
public void triggerMisfired(final Trigger trigger) {
|
||||||
|
logger.error("triggerMisfired() trigger={}", trigger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void triggerComplete(@SuppressWarnings("unused") final Trigger trigger,
|
public void triggerComplete(Trigger trigger, JobExecutionContext context, CompletedExecutionInstruction triggerInstructionCode) {
|
||||||
@SuppressWarnings("unused") final JobExecutionContext context,
|
logger.debug("triggerComplete() trigger={}, context={}, completedExecutionInstruction={}", trigger, context, triggerInstructionCode);
|
||||||
@SuppressWarnings("unused") final CompletedExecutionInstruction triggerInstructionCode) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user