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/09/20 17:08:53 UTC
svn commit: r998952 - in /sling/trunk/bundles/extensions/event/src:
main/java/org/apache/sling/event/impl/JobEventHandler.java
test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java
Author: cziegeler
Date: Mon Sep 20 15:08:53 2010
New Revision: 998952
URL: http://svn.apache.org/viewvc?rev=998952&view=rev
Log:
SLING-1788 : Fail early if loaded job should not be processed on the current app node
Modified:
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java
Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java?rev=998952&r1=998951&r2=998952&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java Mon Sep 20 15:08:53 2010
@@ -228,7 +228,7 @@ public class JobEventHandler
/**
* Activate this component.
- * @param context
+ * @param context The component context.
*/
protected void activate(final ComponentContext context) {
@SuppressWarnings("unchecked")
@@ -581,7 +581,7 @@ public class JobEventHandler
// for another application node
final String appId = (String)info.event.getProperty(EventUtil.PROPERTY_APPLICATION);
if ( info.event.getProperty(EventUtil.PROPERTY_JOB_RUN_LOCAL) != null
- && appId != null && !this.applicationId.equals(appId) ) {
+ && !this.applicationId.equals(appId) ) {
if ( logger.isDebugEnabled() ) {
logger.debug("Discarding job {} : local job for a different application node.", EventUtil.toString(info.event));
}
@@ -1247,26 +1247,45 @@ public class JobEventHandler
return eventCreated;
}
+ /**
+ * Try to load a job from an event node in the repository.
+ * @param eventNode The node to read the event from
+ * @param unloadedJobSet The set of unloaded jobs - if loading fails, the node path is added here
+ * @return <code>true</code> If the job can be loaded.
+ */
private boolean tryToLoadJob(final Node eventNode, final Set<String> unloadedJobSet) {
try {
+ // first check: node should be unlocked (= not processed by any other cluster node)
+ // job should not be finished
if ( !eventNode.isLocked() && !eventNode.hasProperty(EventHelper.NODE_PROPERTY_FINISHED)) {
final String nodePath = eventNode.getPath();
- try {
- final Event event = this.readEvent(eventNode);
- final EventInfo info = new EventInfo();
- info.event = event;
- info.nodePath = nodePath;
- this.queueJob(info);
- } catch (ClassNotFoundException cnfe) {
- // store path for lazy loading
- synchronized ( unloadedJobSet ) {
- unloadedJobSet.add(nodePath);
+ boolean isNonLocal = false;
+ // second check: is this a job that should only run on the instance that it was created on?
+ if ( eventNode.hasProperty(EventUtil.PROPERTY_JOB_RUN_LOCAL) &&
+ !eventNode.getProperty(EventHelper.NODE_PROPERTY_APPLICATION).getString().equals(this.applicationId)) {
+ isNonLocal = true;
+ if ( logger.isDebugEnabled() ) {
+ logger.debug("Discarding job at {} : local job for a different application node.", nodePath);
}
- this.ignoreException(cnfe);
- } catch (RepositoryException re) {
- this.logger.error("Unable to load stored job from " + nodePath, re);
}
- return true;
+ if ( !isNonLocal ) {
+ try {
+ final Event event = this.readEvent(eventNode);
+ final EventInfo info = new EventInfo();
+ info.event = event;
+ info.nodePath = nodePath;
+ this.queueJob(info);
+ } catch (ClassNotFoundException cnfe) {
+ // store path for lazy loading
+ synchronized ( unloadedJobSet ) {
+ unloadedJobSet.add(nodePath);
+ }
+ this.ignoreException(cnfe);
+ } catch (RepositoryException re) {
+ this.logger.error("Unable to load stored job from " + nodePath, re);
+ }
+ return true;
+ }
}
} catch (RepositoryException re) {
this.logger.error("Unable to load stored job from " + eventNode, re);
Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java?rev=998952&r1=998951&r2=998952&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/AbstractRepositoryEventHandlerTest.java Mon Sep 20 15:08:53 2010
@@ -77,6 +77,9 @@ public abstract class AbstractRepository
}
@org.junit.AfterClass public static void shutdownRepository() throws Exception {
+ if ( session != null ) {
+ session.logout();
+ }
RepositoryTestUtil.stopRepository();
}