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/08/15 09:33:02 UTC

svn commit: r686165 - /incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java

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;