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();
}