Chris M. Hostetter created LUCENE-10292: -------------------------------------------
Summary: AnalyzingInfixSuggester thread safety: lookup() fails during (re)build() Key: LUCENE-10292 URL: https://issues.apache.org/jira/browse/LUCENE-10292 Project: Lucene - Core Issue Type: Bug Reporter: Chris M. Hostetter I'm filing this based on anecdotal information from a Solr user w/o experiencing it first hand (and I don't have a test case to demonstrate it) but based on a reading of the code the underlying problem seems self evident... With all other Lookup implementations I've examined, it is possible to call {{lookup()}} regardless of whether another thread is concurrently calling {{build()}} – in all cases I've seen, it is even possible to call {{lookup()}} even if {{build()}} has never been called: the result is just an "empty" {{List<LookupResult>}} Typically this is works because the {{build()}} method uses temporary datastructures until it's "build logic" is complete, at which point it atomically replaces the datastructures used by the {{lookup()}} method. In the case of {{AnalyzingInfixSuggester}} however, the {{build()}} method starts by closing & null'ing out the {{protected SearcherManager searcherMgr}} (which it only populates again once it's completed building up it's index) and then the lookup method starts with... {code:java} if (searcherMgr == null) { throw new IllegalStateException("suggester was not built"); } {code} ... meaning it is unsafe to call {{AnalyzingInfixSuggester.lookup()}} in any situation where another thread may be calling {{AnalyzingInfixSuggester.build()}} -- This message was sent by Atlassian Jira (v8.20.1#820001) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org