lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael McCandless (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (LUCENE-4314) The specification of DocIdSetIterator is needlessly ambiguous.
Date Mon, 20 Aug 2012 23:59:38 GMT

     [ https://issues.apache.org/jira/browse/LUCENE-4314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Michael McCandless resolved LUCENE-4314.
----------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.0
                   5.0

Thanks Franco!
                
> The specification of DocIdSetIterator is needlessly ambiguous.
> --------------------------------------------------------------
>
>                 Key: LUCENE-4314
>                 URL: https://issues.apache.org/jira/browse/LUCENE-4314
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: core/search
>    Affects Versions: 3.6.1, 4.0-BETA
>         Environment: All
>            Reporter: Franco Callari
>            Assignee: Michael McCandless
>              Labels: index,, iterators
>             Fix For: 5.0, 4.0
>
>         Attachments: DocIdSetIterator.patch
>
>
> Quoth Lucene at org.apache.lucene.search.DocIdSetIterator.advance:
>      "Advances to the first beyond (see NOTE below) the current whose document
>       number is greater than or equal to <i>target</i>. [...]
>       NOTE:</b> when <code> target &le; current</code> implementations
may opt
>       not to advance beyond their current {@link #docID()}."
> However, the same specification contradictorily states that advance must behave as if
written:
>      int advance(int target) {
>        int doc;
>        while ((doc = nextDoc()) < target) {}
>        return doc;
>      }
> That is, with at least one call to nextDoc() always made, unconditionally.
> This ambiguity can lead to unexpected behavior. In fact, arguably every user of this
interface that does not test after every call whether the iterator has exhausted AND has advanced
is incorrect.
> For example, I myself had one experimental implementation (coded against a previous Lucene
release) that caused an infinite loop in PhraseScorer.java because, following the above specification,
it "opted" not to move the iterator when advance(target) was called with target < current.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


Mime
View raw message