msokolov opened a new issue, #14123:
URL: https://github.com/apache/lucene/issues/14123
### Description
I'm confused about this one -- it seems straightforward; the test creates an
index with a segment that has no vectors, so its vectorsReader is null, but we
assume it is not null when wrapping it in `SortingCodecReader`. So we can
easily enough add protection ` (if (null) return null)` in
`SortingCodecReader.getVectorReader()` and it is clear that we already expect
to handle a null return in the merge call. Indeed I tried this and it fixes the
test.
What I'm struggling with is (1) why wasn't this a problem in the past? and
(2) Why do we need this protection for KnnVectorsReader, but not for all the
other reader types. For example, looking at
`SortingCodecReader.getPointsReader()` it just assumes that its delegate reader
is non-null.
Re: (1)
```
java.lang.NullPointerException: Cannot invoke
"org.apache.lucene.codecs.KnnVectorsReader.checkIntegrity()" because
"this.val$delegate" is null
Stacktrace
java.lang.NullPointerException: Cannot invoke
"org.apache.lucene.codecs.KnnVectorsReader.checkIntegrity()" because
"this.val$delegate" is null
at
org.apache.lucene.index.SortingCodecReader$5.checkIntegrity(SortingCodecReader.java:557)
at
org.apache.lucene.codecs.KnnVectorsWriter.merge(KnnVectorsWriter.java:95)
at
org.apache.lucene.index.SegmentMerger.mergeVectorValues(SegmentMerger.java:271)
at
org.apache.lucene.index.SegmentMerger.mergeWithLogging(SegmentMerger.java:314)
at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
at
org.apache.lucene.index.IndexWriter.addIndexesReaderMerge(IndexWriter.java:3468)
at
org.apache.lucene.index.IndexWriter$AddIndexesMergeSource.merge(IndexWriter.java:3345)
at
org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:668)
at
org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:729)
Standard Error
Jan 09, 2025 8:54:46 PM
com.carrotsearch.randomizedtesting.RandomizedRunner$QueueUncaughtExceptionsHandler
uncaughtException
WARNING: Uncaught exception in thread: Thread[#695,Lucene Merge Thread
#0,5,TGRP-TestSortingCodecReader]
org.apache.lucene.index.MergePolicy$MergeException:
java.lang.NullPointerException: Cannot invoke
"org.apache.lucene.codecs.KnnVectorsReader.checkIntegrity()" because
"this.val$delegate" is null
at __randomizedtesting.SeedInfo.seed([C61D1CC67658F8FD]:0)
at
org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:764)
at
org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:756)
Caused by: java.lang.NullPointerException: Cannot invoke
"org.apache.lucene.codecs.KnnVectorsReader.checkIntegrity()" because
"this.val$delegate" is null
at
org.apache.lucene.index.SortingCodecReader$5.checkIntegrity(SortingCodecReader.java:557)
at
org.apache.lucene.codecs.KnnVectorsWriter.merge(KnnVectorsWriter.java:95)
at
org.apache.lucene.index.SegmentMerger.mergeVectorValues(SegmentMerger.java:271)
at
org.apache.lucene.index.SegmentMerger.mergeWithLogging(SegmentMerger.java:314)
at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
at
org.apache.lucene.index.IndexWriter.addIndexesReaderMerge(IndexWriter.java:3468)
at
org.apache.lucene.index.IndexWriter$AddIndexesMergeSource.merge(IndexWriter.java:3345)
at
org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:668)
at
org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:729)
```
### Gradle command to reproduce
_No response_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]