Return-Path: X-Original-To: apmail-jackrabbit-dev-archive@www.apache.org Delivered-To: apmail-jackrabbit-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0C05B9EC6 for ; Mon, 3 Oct 2011 13:58:59 +0000 (UTC) Received: (qmail 6227 invoked by uid 500); 3 Oct 2011 13:58:58 -0000 Delivered-To: apmail-jackrabbit-dev-archive@jackrabbit.apache.org Received: (qmail 6180 invoked by uid 500); 3 Oct 2011 13:58:58 -0000 Mailing-List: contact dev-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list dev@jackrabbit.apache.org Received: (qmail 6172 invoked by uid 99); 3 Oct 2011 13:58:58 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Oct 2011 13:58:58 +0000 X-ASF-Spam-Status: No, hits=-2000.5 required=5.0 tests=ALL_TRUSTED,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Oct 2011 13:58:55 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 0262D2A6F16 for ; Mon, 3 Oct 2011 13:58:34 +0000 (UTC) Date: Mon, 3 Oct 2011 13:58:34 +0000 (UTC) From: "Alex Parvulescu (Updated) (JIRA)" To: dev@jackrabbit.apache.org Message-ID: <8037690.3084.1317650314011.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <1348241939.2471.1316704466717.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Updated] (JCR-3082) occasional index out of bounds exception while running UserManagerImplTest.testFindAuthorizableByRelativePath MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/JCR-3082?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Alex Parvulescu updated JCR-3082: --------------------------------- Attachment: JCR-3082.patch It would appear that the DescendantSelfAxisScorer does not respect the DocIdSetIterator API on the advance() method. The BooleanScorer2 has 2 scorers: a DescendantSelfAxisScorer and a MultiScorer. When the MultiScorer is finished, the BooleanScorer2 will call advance on the DescendantSelfAxisScorer with a Integer.MAX_VALUE. Because the DescendantSelfAxisScorer does not respect the api, instead of exausting the scorer, it only calls "subScorer.nextDoc()" once, thus reverting the current docId, to a smaller value, instead of NO_MORE_DOCS. This propagates through all the embedded scorers, acting like there are more docs in the current query, when in fact there are no more. I'm attaching a patch for this specific advance(Integer.MAX_VALUE) on the DescendantSelfAxisScorer that apparently fixes the problem. The DescendantSelfAxisScorer still does not comply with the api, and it would be interesting to look at the other existing implementations in JR, to check for compliance. At the very least we should enable this optimization for the case where it is called with NO_MORE_DOCS, to shortcut to the end of the stream. > occasional index out of bounds exception while running UserManagerImplTest.testFindAuthorizableByRelativePath > ------------------------------------------------------------------------------------------------------------- > > Key: JCR-3082 > URL: https://issues.apache.org/jira/browse/JCR-3082 > Project: Jackrabbit Content Repository > Issue Type: Bug > Components: jackrabbit-core > Reporter: Julian Reschke > Attachments: JCR-3082.patch > > > Stack trace: > java.lang.ArrayIndexOutOfBoundsException: 8 > at org.apache.jackrabbit.core.query.lucene.MultiScorer.score(MultiScorer.java:89) > at org.apache.lucene.search.ConjunctionScorer.score(ConjunctionScorer.java:133) > at org.apache.lucene.search.BooleanScorer2$2.score(BooleanScorer2.java:182) > at org.apache.lucene.search.BooleanScorer2.score(BooleanScorer2.java:303) > at org.apache.jackrabbit.core.query.lucene.LuceneQueryHits.nextScoreNode(LuceneQueryHits.java:68) > at org.apache.jackrabbit.core.query.lucene.QueryHitsAdapter.nextScoreNodes(QueryHitsAdapter.java:54) > at org.apache.jackrabbit.core.query.lucene.FilterMultiColumnQueryHits.nextScoreNodes(FilterMultiColumnQueryHits.java:63) > at org.apache.jackrabbit.core.query.lucene.QueryResultImpl.collectScoreNodes(QueryResultImpl.java:328) > at org.apache.jackrabbit.core.query.lucene.QueryResultImpl.getResults(QueryResultImpl.java:291) > at org.apache.jackrabbit.core.query.lucene.SingleColumnQueryResult.(SingleColumnQueryResult.java:66) > at org.apache.jackrabbit.core.query.lucene.QueryImpl.execute(QueryImpl.java:134) > at org.apache.jackrabbit.core.query.QueryImpl$1.perform(QueryImpl.java:130) > at org.apache.jackrabbit.core.query.QueryImpl$1.perform(QueryImpl.java:1) > at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200) > at org.apache.jackrabbit.core.query.QueryImpl.execute(QueryImpl.java:126) > at org.apache.jackrabbit.core.security.user.IndexNodeResolver.findNodes(IndexNodeResolver.java:109) > at org.apache.jackrabbit.core.security.user.UserManagerImpl.findAuthorizables(UserManagerImpl.java:498) > at org.apache.jackrabbit.core.security.user.UserManagerImpl.findAuthorizables(UserManagerImpl.java:462) > at org.apache.jackrabbit.core.security.user.UserManagerImplTest.testFindAuthorizableByRelativePath(UserManagerImplTest.java:560) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at junit.framework.TestCase.runTest(TestCase.java:154) > at junit.framework.TestCase.runBare(TestCase.java:127) > at junit.framework.TestResult$1.protect(TestResult.java:106) > at junit.framework.TestResult.runProtected(TestResult.java:124) > at junit.framework.TestResult.run(TestResult.java:109) > at junit.framework.TestCase.run(TestCase.java:118) > at org.apache.jackrabbit.test.AbstractJCRTest.run(AbstractJCRTest.java:456) > at junit.framework.TestSuite.runTest(TestSuite.java:208) > at junit.framework.TestSuite.run(TestSuite.java:203) > at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) > at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira