Michael McCandless commented on LUCENE-7491:

bq. To make things less trappy, I'm wondering that maybe 
LeafReader.getPointValues() should never return null.

We could maybe separately consider that?  I don't think that would have 
prevented this particular bug.

I'm generally not really a fan of returning fake empty "should be null but 
caller can't be trusted" objects though: I think it's a degree of API leniency 
that if you take it to its limit, never ends, i.e. how deeply do you keep 
returning null as you dig into the fake object?  These are quite expert APIs 
and I think it's reasonable to expect the caller to be careful with the return 

Today, a null return from {{LeafReader.getPointValues}} is meaningful: it 
notifies you this segment has no points indexed at all.  We would be hiding 
that information if instead we returned a fake empty object.

Not helping matters, I do realize we are inconsistent here, e.g. 
{{LeafReader.fields()}} is not null even if there were no postings in that 
segment, yet {{Fields.terms(String field)}} is null if the postings didn't have 
that field.

> Unexpected merge exception when merging sparse points fields
> ------------------------------------------------------------
>                 Key: LUCENE-7491
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7491
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Michael McCandless
>            Assignee: Michael McCandless
>             Fix For: master (7.0), 6.3
>         Attachments: LUCENE-7491.patch, LUCENE-7491.patch
> Spinoff from this user thread: http://markmail.org/thread/vwdvjgupyz6heep5
> If you have a segment that has points, but a given field ("id") didn't index 
> points, and a later segment where field "id" does index points, when try to 
> merge those segments we hit this (incorrect!) exception:
> {noformat}
> Caused by: org.apache.lucene.index.MergePolicy$MergeException: 
> java.lang.IllegalArgumentException: field="id" did not index point values
>       at __randomizedtesting.SeedInfo.seed([9F3E7B030EF482BD]:0)
>       at 
> org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:668)
>       at 
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:648)
> Caused by: java.lang.IllegalArgumentException: field="id" did not index point 
> values
>       at 
> org.apache.lucene.codecs.lucene60.Lucene60PointsReader.getBKDReader(Lucene60PointsReader.java:126)
>       at 
> org.apache.lucene.codecs.lucene60.Lucene60PointsReader.size(Lucene60PointsReader.java:224)
>       at 
> org.apache.lucene.codecs.lucene60.Lucene60PointsWriter.merge(Lucene60PointsWriter.java:169)
>       at 
> org.apache.lucene.index.SegmentMerger.mergePoints(SegmentMerger.java:173)
>       at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:122)
>       at 
> org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4287)
>       at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3864)
>       at 
> org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:588)
>       at 
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:626)
> {noformat}

This message was sent by Atlassian JIRA

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

Reply via email to