[ 
https://issues.apache.org/jira/browse/OAK-2569?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chetan Mehrotra updated OAK-2569:
---------------------------------
    Attachment: OAK-2569-v1.patch

[patch|^OAK-2569-v1.patch] for the same. Now the cursor would keep a note of 
the index version at which the search was performed and if for next call the 
version is found to be different it would drop the offset. 

As cursor already keeps a set of _seenpaths_ any duplicate result would be 
ignored at the cost of extra processing.
Once we have an agreement over the approach I would apply the same fix to 
LuceneIndex also

[~tmueller] [~alex.parvulescu] Can you have a look?

> LuceneIndex#loadDocs can throw IllegalArgumentException
> -------------------------------------------------------
>
>                 Key: OAK-2569
>                 URL: https://issues.apache.org/jira/browse/OAK-2569
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: lucene
>    Affects Versions: 1.1.6, 1.2.1
>            Reporter: Alex Parvulescu
>            Assignee: Chetan Mehrotra
>             Fix For: 1.3.0, 1.2.2
>
>         Attachments: OAK-2569-v1.patch
>
>
> It looks like in some cases a IllegalArgumentException will be thrown if the 
> _nextBatchSize_ passed to the _searchAfter_ method call is smaller than the 
> current searcher limit (_lastDoc.doc_).
> Stack trace for the failure:
> {code}
> java.lang.IllegalArgumentException: after.doc exceeds the number of documents 
> in the reader: after.doc=387045 limit=386661
>  at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:442)
>  at org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:243)
>  at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex$1.loadDocs(LuceneIndex.java:352)
>  at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex$1.computeNext(LuceneIndex.java:292)
>  at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex$1.computeNext(LuceneIndex.java:283)
>  at 
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
>  at 
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
>  at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex$LucenePathCursor$1.hasNext(LuceneIndex.java:1055)
>  at com.google.common.collect.Iterators$7.computeNext(Iterators.java:645)
>  at 
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
>  at 
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$PathCursor.hasNext(Cursors.java:198)
>  at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex$LucenePathCursor.hasNext(LuceneIndex.java:1076)
>  at 
> org.apache.jackrabbit.oak.plugins.index.aggregate.AggregationCursor.fetchNext(AggregationCursor.java:88)
>  at 
> org.apache.jackrabbit.oak.plugins.index.aggregate.AggregationCursor.hasNext(AggregationCursor.java:75)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.fetchNext(Cursors.java:389)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.hasNext(Cursors.java:381)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.fetchNext(Cursors.java:389)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.hasNext(Cursors.java:381)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.fetchNext(Cursors.java:389)
>  at 
> org.apache.jackrabbit.oak.spi.query.Cursors$IntersectionCursor.hasNext(Cursors.java:381)
>  at 
> org.apache.jackrabbit.oak.query.ast.SelectorImpl.next(SelectorImpl.java:401)
>  at 
> org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.fetchNext(QueryImpl.java:664)
>  at 
> org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.hasNext(QueryImpl.java:689)
>  at 
> org.apache.jackrabbit.oak.query.FilterIterators$SortIterator.init(FilterIterators.java:203)
>  at 
> org.apache.jackrabbit.oak.query.FilterIterators$SortIterator.hasNext(FilterIterators.java:237)
>  at 
> org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$1.fetch(QueryResultImpl.java:108)
>  at 
> org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$1.<init>(QueryResultImpl.java:104)
>  at 
> org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getRows(QueryResultImpl.java:91)
>  at org.apache.jackrabbit.commons.query.GQL.executeJcrQuery(GQL.java:440)
>  at org.apache.jackrabbit.commons.query.GQL.execute(GQL.java:434)
>  at org.apache.jackrabbit.commons.query.GQL.execute(GQL.java:327)
>  at org.apache.jackrabbit.commons.query.GQL.execute(GQL.java:310)
>  at org.apache.jackrabbit.commons.query.GQL.execute(GQL.java:296)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to