Author: cziegeler
Date: Fri Aug 15 00:33:01 2008
New Revision: 686165

URL: http://svn.apache.org/viewvc?rev=686165&view=rev
Log:
SLING-614 : Persist retry count in repository 

Modified:
    
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java

Modified: 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java?rev=686165&r1=686164&r2=686165&view=diff
==============================================================================
--- 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
 (original)
+++ 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
 Fri Aug 15 00:33:01 2008
@@ -632,6 +632,26 @@
         if ( jobId != null ) {
             eventNode.setProperty(EventHelper.NODE_PROPERTY_JOBID, jobId);
         }
+        final long retryCount = 
OsgiUtil.toLong(event.getProperty(EventUtil.PROPERTY_JOB_RETRY_COUNT), 0);
+        final long retries = 
OsgiUtil.toLong(event.getProperty(EventUtil.PROPERTY_JOB_RETRIES), 
this.maxJobRetries);
+        eventNode.setProperty(EventUtil.PROPERTY_JOB_RETRY_COUNT, retryCount);
+        eventNode.setProperty(EventUtil.PROPERTY_JOB_RETRIES, retries);
+    }
+
+    /**
+     * @see 
org.apache.sling.event.impl.AbstractRepositoryEventHandler#addEventProperties(javax.jcr.Node,
 java.util.Dictionary)
+     */
+    protected void addEventProperties(Node eventNode,
+                                      Dictionary<String, Object> properties)
+    throws RepositoryException {
+        super.addEventProperties(eventNode, properties);
+        // convert to integers (jcr only supports long)
+        if ( properties.get(EventUtil.PROPERTY_JOB_RETRIES) != null ) {
+            properties.put(EventUtil.PROPERTY_JOB_RETRIES, 
Integer.valueOf(properties.get(EventUtil.PROPERTY_JOB_RETRIES).toString()));
+        }
+        if ( properties.get(EventUtil.PROPERTY_JOB_RETRY_COUNT) != null ) {
+            properties.put(EventUtil.PROPERTY_JOB_RETRY_COUNT, 
Integer.valueOf(properties.get(EventUtil.PROPERTY_JOB_RETRY_COUNT).toString()));
+        }
     }
 
     /**
@@ -756,19 +776,22 @@
                 retryCount = 
(Integer)job.getProperty(EventUtil.PROPERTY_JOB_RETRY_COUNT);
             }
             retryCount++;
-            if ( retryCount > retries ) {
+            if ( retries != -1 && retryCount > retries ) {
                 reschedule = 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]));
+            if ( !reschedule ) {
+                // update event with retry count and retries
+                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(EventUtil.PROPERTY_JOB_RETRY_COUNT, 
retryCount);
+                newProperties.put(EventUtil.PROPERTY_JOB_RETRIES, retries);
+                job = new Event(job.getTopic(), newProperties);
             }
-            newProperties.put(EventUtil.PROPERTY_JOB_RETRY_COUNT, retryCount);
-            job = new Event(job.getTopic(), newProperties);
         }
         final boolean parallelProcessing = 
job.getProperty(EventUtil.PROPERTY_JOB_PARALLEL) != null;
         // we have to use the same session for unlocking that we used for 
locking!
@@ -825,6 +848,15 @@
                     }
                 }
                 if ( reschedule ) {
+                    // update retry count and retries in the repository
+                    try {
+                        eventNode.setProperty(EventUtil.PROPERTY_JOB_RETRIES, 
(Integer)job.getProperty(EventUtil.PROPERTY_JOB_RETRIES));
+                        
eventNode.setProperty(EventUtil.PROPERTY_JOB_RETRY_COUNT, 
(Integer)job.getProperty(EventUtil.PROPERTY_JOB_RETRY_COUNT));
+                        eventNode.save();
+                    } catch (RepositoryException re) {
+                        // if an exception occurs, we just log
+                        this.logger.error("Exception during job updating job 
rescheduling information.", re);
+                    }
                     final EventInfo info = new EventInfo();
                     try {
                         info.event = job;


Reply via email to