[
https://issues.apache.org/jira/browse/LUCENE-2478?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Schindler updated LUCENE-2478:
----------------------------------
Attachment: LUCENE-2478.patch
This fixes this bug, will commit soon.
The behaviour is now identical and null is handled equally to
DocIdSet.EMPTY_DOCIDSET. DOCIDSET is used in both cases to denote the empty set
even when the filter returned null. By this also the null value is correctly
cached without additional containsKey() checks.
> CachingWrapperFilter throws NPE when Filter.getDocIdSet() returns null
> ----------------------------------------------------------------------
>
> Key: LUCENE-2478
> URL: https://issues.apache.org/jira/browse/LUCENE-2478
> Project: Lucene - Java
> Issue Type: Bug
> Affects Versions: 2.9.1, 2.9.2, 3.0, 3.0.1
> Reporter: Uwe Schindler
> Assignee: Uwe Schindler
> Fix For: 2.9.3, 3.0.2, 3.1, 4.0
>
> Attachments: LUCENE-2478.patch
>
>
> Followup for
> [http://www.lucidimagination.com/search/document/1014ea92f15677bd/filter_getdocidset_returning_null_and_what_this_means_for_cachingwrapperfilter]:
> Daniel Noll is seeing an exception like this:
> {noformat}
> java.lang.NullPointerException
> at
> org.apache.lucene.search.CachingWrapperFilter.docIdSetToCache(CachingWrapperFilter.java:84)
> at
> org.apache.lucene.search.CachingWrapperFilter.getDocIdSet(CachingWrapperFilter.java:112)
> at
> com.nuix.storage.search.LazyConstantScoreQuery$LazyFilterWrapper.getDocIdSet(SourceFile:91)
> at
> org.apache.lucene.search.ConstantScoreQuery$ConstantScorer.<init>(ConstantScoreQuery.java:116)
> at
> org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(ConstantScoreQuery.java:81)
> at
> org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:297)
> at
> org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:297)
> at
> org.apache.lucene.search.QueryWrapperFilter$2.iterator(QueryWrapperFilter.java:75)
> {noformat}
> The class of our own is just an intermediary which delays creating the Filter
> object...
> {code}
> @Override
> public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
> if (delegate == null) {
> delegate = factory.createFilter();
> }
> return delegate.getDocIdSet(reader);
> }
> {code}
> Tracing through the code in CachingWrapperFilter, I can see that this NPE
> would occur if getDocIdSet() were to return null.
> The Javadoc on Filter says that null will be returned if no documents will be
> accepted by the filter, but it doesn't seem that Lucene itself is handling
> null return values correctly, so which is correct? The code or the Javadoc?
> Supposing that null really is OK, does this cause any problems with how
> CachingWrapperFilter is implementing the caching? I notice it's calling
> get() and then comparing against null so it wouldn't appear that it can
> distinguish "the entry isn't in the cache" from "the entry is in the cache
> but it's null".
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]