You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Uwe Schindler (JIRA)" <ji...@apache.org> on 2010/05/26 15:29:35 UTC

[jira] Created: (LUCENE-2478) CachingWrapperFilter throws NPE when Filter.getDocIdSet() returns null

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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


[jira] Updated: (LUCENE-2478) CachingWrapperFilter throws NPE when Filter.getDocIdSet() returns null

Posted by "Uwe Schindler (JIRA)" <ji...@apache.org>.
     [ 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

Patch with additional tests from trunk.

> 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, 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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


[jira] Resolved: (LUCENE-2478) CachingWrapperFilter throws NPE when Filter.getDocIdSet() returns null

Posted by "Uwe Schindler (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/LUCENE-2478?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Uwe Schindler resolved LUCENE-2478.
-----------------------------------

    Resolution: Fixed

Committed revisions: 948429 (trunk), 948430 (3.x), 948432 (3.0), 948450 (2.9)

> 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, 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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


[jira] Updated: (LUCENE-2478) CachingWrapperFilter throws NPE when Filter.getDocIdSet() returns null

Posted by "Uwe Schindler (JIRA)" <ji...@apache.org>.
     [ 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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org