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;
}
}