[
https://issues.apache.org/jira/browse/LUCENE-5139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13720745#comment-13720745
]
Shai Erera commented on LUCENE-5139:
------------------------------------
Yup, the first test shows exactly the problem. Your refresh() method first
calls sm.maybeRefresh() and then reopens the taxonomy. If in between a Searcher
acquired an IndexSearcher (refreshed) and runs a search, it uses a newer
IndexSearcher with an older TaxoReader.
You can try to reverse the order of refresh() so that taxoReader is reopened
before sm.maybeRefresh(). It's usually ok if taxoReader sees more ordinals than
IndexSearcher, not vice versa. I say usually, because in some cases, e.g. when
you replaceTaxonomy and writer.deleteAll(), it's not the case. For that, we
need a SearcherTaxoManager which can verify that the two indexes are consistent.
> ArrayIndexOutOfBoundsException in FacetsAccumulator.accumulate while indexing
> -----------------------------------------------------------------------------
>
> Key: LUCENE-5139
> URL: https://issues.apache.org/jira/browse/LUCENE-5139
> Project: Lucene - Core
> Issue Type: Bug
> Components: modules/facet
> Affects Versions: 4.4
> Environment: Ubuntu 64 bit
> Reporter: Rob Audenaerde
> Attachments: testfacetindexing.zip
>
>
> It is a hard to reproduce problem, but I see it from time to time. I am
> indexing some 100k documents and while I am doing that, I use the search and
> facet module.
> In some cases, I get an AIOOBE on the FacetAccumulator.accumulate method. See
> for example this little stacktrace:
> java.lang.ArrayIndexOutOfBoundsException: 1400222
> at
> org.apache.lucene.facet.search.FastCountingFacetsAggregator.aggregate(FastCountingFacetsAggregator.java:87)
> at
> org.apache.lucene.facet.search.FacetsAccumulator.accumulate(FacetsAccumulator.java:167)
> at
> org.apache.lucene.facet.search.FacetsCollector.getFacetResults(FacetsCollector.java:214)
> at ...
> Some more detail:
> I have a index that is being written to by an IndexWriter. The index is
> searched by a SearcherManager that uses the same Directory. The
> searcherManager has a scheduled maybeRefresh each 1000ms. When refreshing, I
> also check whether the taxonomy has changed. If so, I replace it by the new
> one. I use this code:
> {code}
> TaxonomyReader newReader = TaxonomyReader.openIfChanged( this.taxoReader );
> if ( newReader != null )
> {
> this.taxoReader = newReader;
> LOG.info( "Reopening taxonomyReader because it has changed!" );
> }
> {code}
> I will try to make it more reproducable; but maybe someone already has an
> idea on what might trigger this.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]