|
Author: jacopoc
Date: Tue Jun 26 14:52:06 2012 New Revision: 1354041 URL: http://svn.apache.org/viewvc?rev=1354041&view=rev Log: Added new field "Current Retry Count" and logic to keep track of failed job executions; before this enhancement the check against maxRetry was done querying failed records and the approach had performance issues and could be unreliable because failed records can be purged. However the old mechanism is still used when the new field is not set for backward compatibility. Modified: ofbiz/trunk/framework/service/entitydef/entitymodel.xml ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobManager.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java Modified: ofbiz/trunk/framework/service/entitydef/entitymodel.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/entitydef/entitymodel.xml?rev=1354041&r1=1354040&r2=1354041&view=diff ============================================================================== --- ofbiz/trunk/framework/service/entitydef/entitymodel.xml (original) +++ ofbiz/trunk/framework/service/entitydef/entitymodel.xml Tue Jun 26 14:52:06 2012 @@ -51,6 +51,7 @@ under the License. <field name="serviceName" type="name"></field> <field name="loaderName" type="name"></field> <field name="maxRetry" type="numeric"></field> + <field name="currentRetryCount" type="numeric"></field> <field name="authUserLoginId" type="id-vlong"></field> <field name="runAsUser" type="id-vlong"></field> <field name="runtimeDataId" type="id"></field> Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobManager.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobManager.java?rev=1354041&r1=1354040&r2=1354041&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobManager.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobManager.java Tue Jun 26 14:52:06 2012 @@ -410,6 +410,7 @@ public class JobManager { // set the max retry jFields.put("maxRetry", Long.valueOf(maxRetry)); + jFields.put("currentRetryCount", new Long(0)); // create the value and store GenericValue jobV; Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java?rev=1354041&r1=1354040&r2=1354041&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java Tue Jun 26 14:52:06 2012 @@ -63,6 +63,7 @@ public class PersistedServiceJob extends private Timestamp storedDate = null; private long nextRecurrence = -1; private long maxRetry = -1; + private long currentRetryCount = 0; private boolean warningLogged = false; /** @@ -79,7 +80,14 @@ public class PersistedServiceJob extends this.storedDate = jobValue.getTimestamp("runTime"); this.runtime = storedDate.getTime(); this.maxRetry = jobValue.get("maxRetry") != null ? jobValue.getLong("maxRetry").longValue() : -1; - + Long retryCount = jobValue.getLong("currentRetryCount"); + if (retryCount != null) { + this.currentRetryCount = retryCount.longValue(); + } else { + // backward compatibility + this.currentRetryCount = PersistedServiceJob.getRetries(jobValue, this.delegator); + } + // Debug.logInfo("=============== New PersistedServiceJob, delegator from dctx is [" + dctx.getDelegator().getDelegatorName() + "] and delegator from jobValue is [" + jobValue.getDelegator().getDelegatorName() + "]", module); } @@ -173,7 +181,7 @@ public class PersistedServiceJob extends } Calendar next = expr.next(Calendar.getInstance()); if (next != null) { - createRecurrence(job, next.getTimeInMillis()); + createRecurrence(job, next.getTimeInMillis(), false); } } } catch (GenericEntityException e) { @@ -182,7 +190,7 @@ public class PersistedServiceJob extends if (Debug.infoOn()) Debug.logInfo("Job [" + getJobName() + "] Id [" + getJobId() + "] -- Next runtime: " + new Date(nextRecurrence), module); } - private void createRecurrence(GenericValue job, long next) throws GenericEntityException { + private void createRecurrence(GenericValue job, long next, boolean isRetryOnFailure) throws GenericEntityException { if (Debug.verboseOn()) Debug.logVerbose("Next runtime returned: " + next, module); if (next > runtime) { @@ -198,6 +206,11 @@ public class PersistedServiceJob extends newJob.set("startDateTime", null); newJob.set("runByInstanceId", null); newJob.set("runTime", new java.sql.Timestamp(next)); + if (isRetryOnFailure) { + newJob.set("currentRetryCount", new Long(currentRetryCount + 1)); + } else { + newJob.set("currentRetryCount", new Long(0)); + } nextRecurrence = next; delegator.createSetNextSeqId(newJob); if (Debug.verboseOn()) Debug.logVerbose("Created next job entry: " + newJob, module); @@ -251,7 +264,7 @@ public class PersistedServiceJob extends cal.add(Calendar.MINUTE, ServiceConfigUtil.getFailedRetryMin()); long next = cal.getTimeInMillis(); try { - createRecurrence(job, next); + createRecurrence(job, next, true); } catch (GenericEntityException gee) { Debug.logError(gee, "ERROR: Unable to re-schedule job [" + getJobId() + "] to re-run : " + job, module); } @@ -339,8 +352,7 @@ public class PersistedServiceJob extends } // returns the number of current retries - private long getRetries() throws InvalidJobException { - GenericValue job = this.getJob(); + private static long getRetries(GenericValue job, Delegator delegator) { String pJobId = job.getString("parentJobId"); if (pJobId == null) { return 0; @@ -361,9 +373,6 @@ public class PersistedServiceJob extends if (maxRetry == -1) { return true; } - if (this.getRetries() < maxRetry) { - return true; - } - return false; + return currentRetryCount < maxRetry; } } |
| Free forum by Nabble | Edit this page |
