[
https://issues.apache.org/jira/browse/LUCENE-5931?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14144569#comment-14144569
]
Michael McCandless commented on LUCENE-5931:
--------------------------------------------
Hi [~vfunstein], I'm glad the patched fixed your issue ... thanks for
testing.
Deletes are special because 1) they are allowed to change after a
segment is written, and 2) IndexWriter carries them in RAM, rather
than writing to / reading from the filesystem, so the only
"point-in-time-ness" is maintained by IW being careful to not change a
liveDocs already paired up with a SegmentReader.
> DirectoryReader.openIfChanged(oldReader, commit) incorrectly assumes given
> commit point has deletes/field updates
> -----------------------------------------------------------------------------------------------------------------
>
> Key: LUCENE-5931
> URL: https://issues.apache.org/jira/browse/LUCENE-5931
> Project: Lucene - Core
> Issue Type: Bug
> Components: core/index
> Affects Versions: 4.6.1
> Reporter: Vitaly Funstein
> Assignee: Michael McCandless
> Priority: Critical
> Attachments: CommitReuseTest.java, LUCENE-5931.patch,
> LUCENE-5931.patch, LUCENE-5931.patch, LUCENE-5931.patch
>
>
> {{StandardDirectoryReader}} assumes that the segments from commit point have
> deletes, when they may not, yet the original SegmentReader for the segment
> that we are trying to reuse does. This is evident when running attached JUnit
> test case with asserts enabled (default):
> {noformat}
> java.lang.AssertionError
> at
> org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:188)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:326)
> at
> org.apache.lucene.index.StandardDirectoryReader$2.doBody(StandardDirectoryReader.java:320)
> at
> org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:702)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenFromCommit(StandardDirectoryReader.java:315)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenNoWriter(StandardDirectoryReader.java:311)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:262)
> at
> org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:183)
> {noformat}
> or, if asserts are disabled then it falls through into NPE:
> {noformat}
> java.lang.NullPointerException
> at java.io.File.<init>(File.java:305)
> at
> org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:80)
> at
> org.apache.lucene.codecs.lucene40.BitVector.<init>(BitVector.java:327)
> at
> org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat.readLiveDocs(Lucene40LiveDocsFormat.java:90)
> at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:131)
> at
> org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:194)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:326)
> at
> org.apache.lucene.index.StandardDirectoryReader$2.doBody(StandardDirectoryReader.java:320)
> at
> org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:702)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenFromCommit(StandardDirectoryReader.java:315)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenNoWriter(StandardDirectoryReader.java:311)
> at
> org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:262)
> at
> org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:183)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]