[ 
https://issues.apache.org/jira/browse/SLING-8407?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16835633#comment-16835633
 ] 

Thomas Mueller commented on SLING-8407:
---------------------------------------

The following change in Sling didn't work as expected.

{noformat}
sling-org-apache-sling-event
git diff src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java 
b/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
index 279d5ca..0663aaa 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java
@@ -520,6 +520,7 @@ public class JobManagerImpl
                 buf.append(Job.PROPERTY_JOB_CREATED);
                 buf.append(" ascending");
             }
+            buf.append(" option(traversal fail)");
             final Iterator<Resource> iter = 
resolver.findResources(buf.toString(), "xpath");
             long count = 0;
 
@@ -535,7 +536,10 @@ public class JobManagerImpl
                 }
              }
         } catch (final QuerySyntaxException qse) {
-            logger.warn("Query syntax wrong " + buf.toString(), qse);
+            // no index is available
+            String message = "Query " + buf.toString() + " failed: " + 
qse.getMessage();
+            logger.debug(message, qse);
+            logger.info(message);
         } finally {
             resolver.close();
         }
{noformat}

It results in a test failure, as follows. Actually not a test failure, but 
looks like an endless loop in a test:
{noformat}
08.05.2019 16:13:39.309 *INFO* [Time-limited test] 
org.apache.sling.event.impl.jobs.JobManagerImpl Query 
/jcr:root/var/eventing/jobs//element(*,slingevent:Job)[@event.job.topic = 
'sling/test/history' and @slingevent:finishedState] order by 
@slingevent:finishedDate descending option(traversal fail) failed: 
java.text.ParseException: Query:
/jcr:root/var/eventing/jobs//element(*,slingevent:Job)[@event.job.topic = 
'sling/test/history' and @slingevent:finishedState] order by 
@slingevent:finishedDate descending option(*)(traversal fail); expected: <end>
{noformat}

I couldn't find out which test this is, and which version of Oak is used: mvn 
dependency:tree doesn't say. And
{noformat}
mvn test dependency:tree -DskipTests=true | grep "jackrabbit"
says:
[INFO] skip non existing resourceDirectory 
/Users/mueller/jackrabbit/sling-org-apache-sling-event/src/test/resources
[INFO] +- org.apache.jackrabbit:jackrabbit-jcr-commons:jar:2.11.2:provided
[INFO] |  |  \- 
org.apache.jackrabbit.vault:org.apache.jackrabbit.vault:jar:3.1.18:test
[INFO] |  +- org.apache.jackrabbit:jackrabbit-api:jar:2.11.3:test
{noformat}

Looks like some kind of JCR mock implementation is used?
{noformat}
org.apache.sling:org.apache.sling.testing.jcr-mock:jar
{noformat}

> JobManagerImpl.findJobs should prevent traversal
> ------------------------------------------------
>
>                 Key: SLING-8407
>                 URL: https://issues.apache.org/jira/browse/SLING-8407
>             Project: Sling
>          Issue Type: Improvement
>          Components: Event
>            Reporter: Thomas Mueller
>            Priority: Major
>
> The method 
> [JobManagerImpl.findJobs|https://github.com/apache/sling-org-apache-sling-event/blob/master/src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java#L373]
>  runs a JCR query to find all jobs for a topic.
> It is possible that such a query is running while the repository isn't 
> initialized yet, meaning while the index isn't available yet. What is 
> happening in this case is that the query is traversing all nodes below that 
> path, triggering a warning that the query doesn't use an index. It is 
> sometimes happening when a health check is running before the repository is 
> initialized (ReplicationQueueHealthCheck and DistributionQueueHealthCheck).
> It doesn't make sense that the query traverses the nodes. It should use an 
> index. If the index isn't available yet, it should fail. Therefore, the query 
> should use "option(traversal fail)". That would result in an exception that 
> can be caught.  I will log a related issue to change the health checks to 
> process this exception and return HEALTH_CHECK_ERROR for this case.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to