You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/08/20 02:19:00 UTC
svn commit: r687205 - in /ode/branches/APACHE_ODE_1.X:
bpel-runtime/src/main/java/org/apache/ode/bpel/engine/
scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/
scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/
Author: mriou
Date: Tue Aug 19 17:18:59 2008
New Revision: 687205
URL: http://svn.apache.org/viewvc?rev=687205&view=rev
Log:
Keep retrying instead of creating bad-job-XXX.ser
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
ode/branches/APACHE_ODE_1.X/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java
Modified: ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java?rev=687205&r1=687204&r2=687205&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java Tue Aug 19 17:18:59 2008
@@ -287,7 +287,6 @@
// ALSO we have to release the lock obtained above (IMPORTANT), lest the whole system come
// to a grinding halt.
try {
-
BpelProcess process;
if (we.getProcessId() != null) {
process = _activeProcesses.get(we.getProcessId());
@@ -347,50 +346,8 @@
}
private boolean checkRetry(final JobInfo jobInfo, Throwable t) {
- // TODO, better handling of failed jobs (put them in the DB perhaps?)
- if (jobInfo.retryCount < MAX_RETRIES)
- return true;
-
- __log.error("Job could not be completed after " + MAX_RETRIES + ": " + jobInfo, t);
-
- boolean saveToDisk = false;
- if (jobInfo.jobDetail.get("final") == null) {
- __log.error("Rescheduling problematic job for a bit later: " + jobInfo, t);
-
- try {
- if (jobInfo.jobDetail.get("inmem") != null)
- _contexts.scheduler.scheduleVolatileJob(true, jobInfo.jobDetail);
- else
- _contexts.scheduler.execIsolatedTransaction(new Callable<Void>() {
- public Void call() throws Exception {
- jobInfo.jobDetail.put("final", true);
- _contexts.scheduler.schedulePersistedJob(jobInfo.jobDetail,
- new Date(System.currentTimeMillis() + 60 * 1000));
- return null;
- }
- });
- } catch (Exception ex) {
- __log.error("Error rescheduling problematic job: " + jobInfo,ex);
- saveToDisk = true;
- }
- } else {
- saveToDisk = true;
- }
-
- if (saveToDisk)
- try {
- File f = File.createTempFile("ode-bad-job", ".ser", new File(""));
- ObjectOutputStream fos = new ObjectOutputStream(new FileOutputStream(f));
- fos.writeObject(jobInfo);
- fos.close();
- __log.error("Saved problematic job to disk (last resort): " + jobInfo +" in file " + f);
- } catch (Exception ex) {
- __log.error("Could not save bad job; it will be lost: " + jobInfo, ex);
- }
-
-
- // No more retries.
- return false;
+ __log.error("Job could not be completed after " + jobInfo.retryCount + " retries: " + jobInfo, t);
+ return jobInfo.jobDetail.get("inmem") == null;
}
/**
Modified: ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java?rev=687205&r1=687204&r2=687205&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java (original)
+++ ode/branches/APACHE_ODE_1.X/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java Tue Aug 19 17:18:59 2008
@@ -354,12 +354,10 @@
// it the synchronization is a best-effort but not perfect.
__log.debug("job no longer in db forced rollback.");
} catch (JobProcessorException jpe) {
- if (jpe.retry) {
- __log.error("Error while processing transaction, retrying.", jpe);
- doRetry(job);
- } else {
+ if (jpe.retry)
+ __log.error("Error while processing transaction, retrying in " + doRetry(job) + "s");
+ else
__log.error("Error while processing transaction, no retry.", jpe);
- }
} catch (Exception ex) {
__log.error("Error while executing transaction", ex);
}
@@ -508,12 +506,15 @@
}
- private void doRetry(Job job) throws DatabaseException {
- Calendar retryTime = Calendar.getInstance();
- retryTime.add(Calendar.SECOND, 2);
- job.detail.put("retry", job.detail.get("retry") != null ? (((Integer)job.detail.get("retry")) + 1) : 1);
- Job jobRetry = new Job(retryTime.getTime().getTime(), true, job.detail);
+ private long doRetry(Job job) throws DatabaseException {
+ int retry = job.detail.get("retry") != null ? (((Integer)job.detail.get("retry")) + 1) : 0;
+ job.detail.put("retry", retry);
+ long delay = (long)(Math.pow(5, retry));
+ // Don't want to go further than a day
+ if (delay > 24*60*60) delay = 24*60*60;
+ Job jobRetry = new Job(System.currentTimeMillis() + delay*1000, true, job.detail);
_db.insertJob(jobRetry, _nodeId, false);
+ return delay;
}
private abstract class SchedulerTask extends Task implements Runnable {
Modified: ode/branches/APACHE_ODE_1.X/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java?rev=687205&r1=687204&r2=687205&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java (original)
+++ ode/branches/APACHE_ODE_1.X/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/RetriesTest.java Tue Aug 19 17:18:59 2008
@@ -44,14 +44,14 @@
_txm.commit();
}
- Thread.sleep(5000);
+ Thread.sleep(10000);
assertEquals(3, _tried);
}
public void onScheduledJob(Scheduler.JobInfo jobInfo) throws Scheduler.JobProcessorException {
_tried++;
- throw new Scheduler.JobProcessorException(jobInfo.retryCount < 2);
+ throw new Scheduler.JobProcessorException(jobInfo.retryCount < 3);
}
Map<String, Object> newDetail(String x) {