improve logging in SchedulerTriggerListener (re. FINERACT-922) (#812)

This commit is contained in:
Michael Vorburger ⛑️
2020-05-24 20:18:36 +01:00
committed by GitHub
parent ce570b4b33
commit 4cb9f9d3e0
@@ -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) {
} }
} }