You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/02/07 10:34:16 UTC

svn commit: r619322 - /incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java

Author: cziegeler
Date: Thu Feb  7 01:34:16 2008
New Revision: 619322

URL: http://svn.apache.org/viewvc?rev=619322&view=rev
Log:
SLING-177: Start adding support for rescheduling and retrying jobs.

Modified:
    incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java

Modified: incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java?rev=619322&r1=619321&r2=619322&view=diff
==============================================================================
--- incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java (original)
+++ incubator/sling/trunk/sling/event/src/main/java/org/apache/sling/event/EventUtil.java Thu Feb  7 01:34:16 2008
@@ -40,12 +40,21 @@
     /** The job topic property. */
     public static final String PROPERTY_JOB_TOPIC = "event.job.topic";
 
-    /** The property for the unique event id. */
+    /** The property for the unique event id. Value is of type String. */
     public static final String PROPERTY_JOB_ID = "event.job.id";
 
     /** The property to set if a job can be run parallel to any other job. */
     public static final String PROPERTY_JOB_PARALLEL = "event.job.parallel";
 
+    /** The property to track the retry count for jobs. Value is of type Integer. */
+    public static final String PROPERTY_JOB_RETRY_COUNT = "event.job.retrycount";
+
+    /** The property to for setting the maximum number of retries. Value is of type Integer. */
+    public static final String PROPERTY_JOB_RETRIES = "event.job.retries";
+
+    /** The property to set a retry delay. Value is of type Long. */
+    public static final String PROPERTY_JOB_RETRY_DELAY = "event.job.retrydelay";
+
     /** The topic for jobs. */
     public static final String TOPIC_JOB = "org/apache/sling/event/job";
 
@@ -137,7 +146,30 @@
         if ( ctx == null ) {
             throw new NullPointerException("JobStatusNotifier context is not available in event properties.");
         }
-        ctx.notifier.finishedJob(job, ctx.eventNodePath, ctx.lockToken, true);
+        boolean retry = true;
+        // check if we exceeded the number of retries
+        if ( job.getProperty(PROPERTY_JOB_RETRIES) != null ) {
+            int retries = (Integer) job.getProperty(PROPERTY_JOB_RETRIES);
+            int retryCount = 0;
+            if ( job.getProperty(PROPERTY_JOB_RETRY_COUNT) != null ) {
+                retryCount = (Integer)job.getProperty(PROPERTY_JOB_RETRY_COUNT);
+            }
+            retryCount++;
+            if ( retryCount >= retries ) {
+                retry = false;
+            }
+            // update event with retry count
+            final Dictionary<String, Object> newProperties;
+            // create a new dictionary
+            newProperties = new Hashtable<String, Object>();
+            final String[] names = job.getPropertyNames();
+            for(int i=0; i<names.length; i++ ) {
+                newProperties.put(names[i], job.getProperty(names[i]));
+            }
+            newProperties.put(PROPERTY_JOB_RETRY_COUNT, retryCount);
+            job = new Event(job.getTopic(), newProperties);
+        }
+        ctx.notifier.finishedJob(job, ctx.eventNodePath, ctx.lockToken, retry);
     }
 
     /**