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;