SLING-2119 : Add a periodic sanity check to the internal job cache
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/event@1141656 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
index 62dc55a..2234c00 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
@@ -254,8 +254,6 @@
final boolean doSanityCheck = (schedulerRuns % 12 == 0);
if ( doSanityCheck ) {
logger.debug("cleanup: running sanity check");
- final List<JobEvent> removedEvents = new ArrayList<JobEvent>();
-
final Map<String, JobEvent> currentEvents;
synchronized (this.allEvents) {
currentEvents = new HashMap<String, JobEvent>(this.allEvents);
@@ -268,19 +266,15 @@
logger.debug("cleanup: Removing dead job {}", job);
this.allEvents.remove(entry.getKey());
}
- removedEvents.add(job);
- }
- }
-
- for(final JobEvent removedJob : removedEvents) {
- final String topic = (String)removedJob.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
- final List<JobEvent> l;
- synchronized ( this.allEventsByTopic ) {
- l = this.allEventsByTopic.get(topic);
- }
- if ( l != null ) {
- synchronized ( l ) {
- l.remove(removedJob);
+ final String topic = (String)job.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
+ final List<JobEvent> l;
+ synchronized ( this.allEventsByTopic ) {
+ l = this.allEventsByTopic.get(topic);
+ }
+ if ( l != null ) {
+ synchronized ( l ) {
+ l.remove(job);
+ }
}
}
}
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
index 32a25ad..7b7ca3f 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
@@ -1337,17 +1337,21 @@
*/
public boolean isAlive(final JCRJobEvent info) {
final String path = this.getNodePath(info.uniqueId);
- synchronized ( this.backgroundLock ) {
- try {
- if ( this.backgroundSession.itemExists(path) ) {
- final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
- if ( !this.backgroundSession.itemExists(finishedPath) ) {
- return true;
- }
+ Session s = null;
+ try {
+ s = this.environment.createAdminSession();
+ if ( s.itemExists(path) ) {
+ final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
+ if ( !s.itemExists(finishedPath) ) {
+ return true;
}
- } catch (final RepositoryException re) {
- // there is nothing we can do
- this.ignoreException(re);
+ }
+ } catch (final RepositoryException re) {
+ // there is nothing we can do
+ this.ignoreException(re);
+ } finally {
+ if ( s != null ) {
+ s.logout();
}
}
return false;