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 2010/04/07 14:21:20 UTC
svn commit: r931518 - in /sling/trunk/bundles/extensions/event: pom.xml
src/main/java/org/apache/sling/event/EventUtil.java
src/main/java/org/apache/sling/event/impl/EventingThreadPool.java
src/main/resources/OSGI-INF/metatype/metatype.properties
Author: cziegeler
Date: Wed Apr 7 12:21:19 2010
New Revision: 931518
URL: http://svn.apache.org/viewvc?rev=931518&view=rev
Log:
SLING-1474 : Allow to change the priority for jobs
Modified:
sling/trunk/bundles/extensions/event/pom.xml
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/EventingThreadPool.java
sling/trunk/bundles/extensions/event/src/main/resources/OSGI-INF/metatype/metatype.properties
Modified: sling/trunk/bundles/extensions/event/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/pom.xml?rev=931518&r1=931517&r2=931518&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/pom.xml (original)
+++ sling/trunk/bundles/extensions/event/pom.xml Wed Apr 7 12:21:19 2010
@@ -29,7 +29,7 @@
<artifactId>org.apache.sling.event</artifactId>
<packaging>bundle</packaging>
- <version>2.3.1-SNAPSHOT</version>
+ <version>2.4.0-SNAPSHOT</version>
<name>Apache Sling Event Support</name>
<description>
@@ -60,7 +60,7 @@
javax.jcr.*;version=1.0,*
</Import-Package>
<Export-Package>
- org.apache.sling.event;version=2.3.0
+ org.apache.sling.event;version=2.4.0
</Export-Package>
<Private-Package>
org.apache.sling.event.impl,
Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java?rev=931518&r1=931517&r2=931518&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/EventUtil.java Wed Apr 7 12:21:19 2010
@@ -91,6 +91,25 @@ public abstract class EventUtil {
*/
public static final String PROPERTY_JOB_QUEUE_ORDERED = "event.job.queueordered";
+ /** This property allows to override the priority for the thread used to start this job.
+ * The property is evaluated by the {@link #processJob(Event, JobProcessor)} method.
+ * If another way of executing the job is used, it is up to the client to ensure
+ * the job priority.
+ * For possible values see {@link JobPriority}.
+ * @since 2.4
+ */
+ public static final String PROPERTY_JOB_PRIORITY = "event.job.priority";
+
+ /**
+ * The priority for jobs.
+ * @since 2.4
+ */
+ public enum JobPriority {
+ NORM,
+ MIN,
+ MAX
+ };
+
/** The topic for jobs. */
public static final String TOPIC_JOB = "org/apache/sling/event/job";
@@ -302,6 +321,7 @@ public abstract class EventUtil {
notify = false;
}
}
+ final JobPriority priority = (JobPriority) job.getProperty(PROPERTY_JOB_PRIORITY);
final boolean notifyResult = notify;
final Runnable task = new Runnable() {
@@ -310,6 +330,18 @@ public abstract class EventUtil {
* @see java.lang.Runnable#run()
*/
public void run() {
+ // update priority
+ final int oldPriority = Thread.currentThread().getPriority();
+ if ( priority != null ) {
+ switch ( priority ) {
+ case NORM : Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
+ break;
+ case MIN : Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
+ break;
+ case MAX : Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
+ break;
+ }
+ }
boolean result = false;
try {
result = processor.process(job);
@@ -318,6 +350,7 @@ public abstract class EventUtil {
// we don't reschedule if an exception occurs
result = true;
} finally {
+ Thread.currentThread().setPriority(oldPriority);
if ( notifyResult ) {
if ( result ) {
EventUtil.finishedJob(job);
Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/EventingThreadPool.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/EventingThreadPool.java?rev=931518&r1=931517&r2=931518&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/EventingThreadPool.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/EventingThreadPool.java Wed Apr 7 12:21:19 2010
@@ -20,12 +20,14 @@ package org.apache.sling.event.impl;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.PropertyOption;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.OsgiUtil;
import org.apache.sling.commons.threads.ModifiableThreadPoolConfig;
import org.apache.sling.commons.threads.ThreadPoolConfig;
import org.apache.sling.commons.threads.ThreadPoolManager;
+import org.apache.sling.commons.threads.ThreadPoolConfig.ThreadPriority;
import org.osgi.service.component.ComponentContext;
@@ -55,6 +57,11 @@ public class EventingThreadPool implemen
@Property(intValue=DEFAULT_QUEUE_SIZE)
private static final String PROPERTY_QUEUE_SIZE = "queueSize";
+ @Property(value="NORM",
+ options={@PropertyOption(name="NORM",value="Norm"),
+ @PropertyOption(name="MIN",value="Min"),
+ @PropertyOption(name="MAX",value="Max")})
+ private static final String PROPERTY_PRIORITY = "priority";
/**
* Activate this component.
* @param context
@@ -65,6 +72,7 @@ public class EventingThreadPool implemen
config.setMaxPoolSize(OsgiUtil.toInteger(ctx.getProperties().get(PROPERTY_MAX_POOL_SIZE), DEFAULT_MAX_POOL_SIZE));
config.setQueueSize(OsgiUtil.toInteger(ctx.getProperties().get(PROPERTY_QUEUE_SIZE), DEFAULT_QUEUE_SIZE));
config.setShutdownGraceful(true);
+ config.setPriority(ThreadPriority.valueOf(OsgiUtil.toString(ctx.getProperties().get(PROPERTY_PRIORITY), "NORM")));
this.threadPool = threadPoolManager.create(config);
}
Modified: sling/trunk/bundles/extensions/event/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=931518&r1=931517&r2=931518&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/resources/OSGI-INF/metatype/metatype.properties (original)
+++ sling/trunk/bundles/extensions/event/src/main/resources/OSGI-INF/metatype/metatype.properties Wed Apr 7 12:21:19 2010
@@ -111,6 +111,9 @@ maxPoolSize.description = The maximum po
queueSize.name = Queue Size
queueSize.description = The maximum size of the thread queue if the pool is exhausted.
+priority.name = Priority
+priority.description = The priority for the threads from this pool. Default is norm.
+
#
# Shared labels
scheduler.period.name = Event Cleanup Internal