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: 3.0.1, 3.0, 2.9.2, 2.9.1
Reporter: Uwe Schindler
Assignee: Uwe Schindler
Fix For: 2.9.3, 3.0.2, 3.1, 4.0
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]