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 }; /**