Author: cziegeler
Date: Tue Sep 17 17:27:34 2013
New Revision: 1524136

URL: http://svn.apache.org/r1524136
Log:
SLING-3028 :  Support for progress tracking of jobs 

Modified:
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractParallelJobQueue.java
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/OrderedJobQueue.java
    
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java?rev=1524136&r1=1524135&r2=1524136&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
 Tue Sep 17 17:27:34 2013
@@ -42,6 +42,9 @@ public class JobImpl implements Job {
     /** Internal job property if this is an bridged event (event admin). */
     public static final String PROPERTY_BRIDGED_EVENT = 
"slingevent:eventadmin";
 
+    /** Internal job property containing optional delay override. */
+    public static final String PROPERTY_DELAY_OVERRIDE = 
":slingevent:delayOverride";
+
     private final ValueMap properties;
 
     private final String topic;
@@ -230,6 +233,13 @@ public class JobImpl implements Job {
         }
     }
 
+    /**
+     * Prepare a new job execution
+     */
+    public void prepare() {
+        this.properties.remove(JobImpl.PROPERTY_DELAY_OVERRIDE);
+    }
+
     @Override
     public String toString() {
         return "JobImpl [properties=" + properties + ", topic=" + topic

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java?rev=1524136&r1=1524135&r2=1524136&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
 Tue Sep 17 17:27:34 2013
@@ -532,34 +532,35 @@ public abstract class AbstractJobQueue
 
                                 try {
                                     synchronized ( job ) {
+                                        job.prepare();
                                         result = consumer.process(job, new 
JobExecutionContext() {
 
                                             @Override
-                                            public void update(long eta) {
+                                            public void update(final long eta) 
{
                                                 // TODO Auto-generated method 
stub
 
                                             }
 
                                             @Override
-                                            public void startProgress(long 
eta) {
+                                            public void startProgress(final 
long eta) {
                                                 // TODO Auto-generated method 
stub
 
                                             }
 
                                             @Override
-                                            public void startProgress(int 
steps) {
+                                            public void startProgress(final 
int steps) {
                                                 // TODO Auto-generated method 
stub
 
                                             }
 
                                             @Override
-                                            public void setProgress(int step) {
+                                            public void setProgress(final int 
step) {
                                                 // TODO Auto-generated method 
stub
 
                                             }
 
                                             @Override
-                                            public void log(String message, 
Object... args) {
+                                            public void log(final String 
message, Object... args) {
                                                 // TODO Auto-generated method 
stub
 
                                             }
@@ -590,6 +591,9 @@ public abstract class AbstractJobQueue
                                     currentThread.setPriority(oldPriority);
                                     currentThread.setName(oldName);
                                     if ( result != null ) {
+                                        if ( result.getRetryDelayInMs() != 
null ) {
+                                            
job.setProperty(JobImpl.PROPERTY_DELAY_OVERRIDE, result.getRetryDelayInMs());
+                                        }
                                         finishedJob(job.getId(), result, 
false);
                                     }
                                 }
@@ -783,6 +787,16 @@ public abstract class AbstractJobQueue
         return null;
     }
 
+    protected long getRetryDelay(final JobHandler handler) {
+        long delay = this.configuration.getRetryDelayInMs();
+        if ( handler.getJob().getProperty(JobImpl.PROPERTY_DELAY_OVERRIDE) != 
null ) {
+            delay = 
handler.getJob().getProperty(JobImpl.PROPERTY_DELAY_OVERRIDE, Long.class);
+        } else  if ( 
handler.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY) != null ) {
+            delay = handler.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY, 
Long.class);
+        }
+        return delay;
+    }
+
     /**
      * Reschedule a job.
      */

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractParallelJobQueue.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractParallelJobQueue.java?rev=1524136&r1=1524135&r2=1524136&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractParallelJobQueue.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractParallelJobQueue.java
 Tue Sep 17 17:27:34 2013
@@ -24,7 +24,6 @@ import org.apache.sling.commons.schedule
 import org.apache.sling.event.impl.jobs.JobConsumerManager;
 import org.apache.sling.event.impl.jobs.JobHandler;
 import org.apache.sling.event.impl.jobs.config.InternalQueueConfiguration;
-import org.apache.sling.event.jobs.Job;
 import org.osgi.service.event.EventAdmin;
 
 /**
@@ -123,10 +122,7 @@ public abstract class AbstractParallelJo
     protected JobHandler reschedule(final JobHandler info) {
         // we just sleep for the delay time - if none, we continue and retry
         // this job again
-        long delay = this.configuration.getRetryDelayInMs();
-        if ( info.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY) != null ) 
{
-            delay = info.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY, 
Long.class);
-        }
+        final long delay = this.getRetryDelay(info);
         if ( delay > 0 ) {
             final Date fireDate = new Date();
             fireDate.setTime(System.currentTimeMillis() + delay);

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/OrderedJobQueue.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/OrderedJobQueue.java?rev=1524136&r1=1524135&r2=1524136&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/OrderedJobQueue.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/OrderedJobQueue.java
 Tue Sep 17 17:27:34 2013
@@ -29,7 +29,6 @@ import java.util.TreeSet;
 import org.apache.sling.event.impl.jobs.JobConsumerManager;
 import org.apache.sling.event.impl.jobs.JobHandler;
 import org.apache.sling.event.impl.jobs.config.InternalQueueConfiguration;
-import org.apache.sling.event.jobs.Job;
 import org.osgi.service.event.EventAdmin;
 
 /**
@@ -169,10 +168,7 @@ public final class OrderedJobQueue exten
     protected JobHandler reschedule(final JobHandler handler) {
         // we just sleep for the delay time - if none, we continue and retry
         // this job again
-        long delay = this.configuration.getRetryDelayInMs();
-        if ( handler.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY) != 
null ) {
-            delay = handler.getJob().getProperty(Job.PROPERTY_JOB_RETRY_DELAY, 
Long.class);
-        }
+        final long delay = this.getRetryDelay(handler);
         if ( delay > 0 ) {
             synchronized ( this.sleepLock ) {
                 this.sleepLock.sleepingSince = System.currentTimeMillis();

Modified: 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java?rev=1524136&r1=1524135&r2=1524136&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java
 (original)
+++ 
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java
 Tue Sep 17 17:27:34 2013
@@ -34,8 +34,10 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.event.EventUtil;
+import org.apache.sling.event.impl.jobs.JobImpl;
 import org.apache.sling.event.impl.jobs.deprecated.JobStatusNotifier;
 import org.apache.sling.event.jobs.JobUtil;
+import org.apache.sling.event.jobs.consumer.JobConsumer;
 import org.osgi.service.event.EventConstants;
 
 public abstract class ResourceHelper {
@@ -61,7 +63,9 @@ public abstract class ResourceHelper {
         JobUtil.PROPERTY_JOB_RUN_LOCAL,
         JobUtil.PROPERTY_JOB_QUEUE_ORDERED,
         JobUtil.PROPERTY_NOTIFICATION_JOB,
-        JobStatusNotifier.CONTEXT_PROPERTY_NAME
+        JobStatusNotifier.CONTEXT_PROPERTY_NAME,
+        JobImpl.PROPERTY_DELAY_OVERRIDE,
+        JobConsumer.PROPERTY_JOB_ASYNC_HANDLER
     };
 
     /**


Reply via email to