[
https://issues.apache.org/jira/browse/LUCENE-7662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15857826#comment-15857826
]
Michael McCandless commented on LUCENE-7662:
--------------------------------------------
Thanks [~mdrob]; I think this patch looks good, except it makes some tests
angry, e.g.:
{noformat}
[junit4] 2> NOTE: reproduce with: ant test
-Dtestcase=TestLucene62SegmentInfoFormat -Dtests.method=testRandomExceptions
-Dtests.seed=F65CD1D4D104665D -Dtests.locale=zh -Dtests.timezone=Asia/Khandyga
-Dtests.asserts=true -Dtests.file.encoding=US-ASCII
[junit4] ERROR 0.03s J3 |
TestLucene62SegmentInfoFormat.testRandomExceptions <<<
[junit4] > Throwable #1: org.apache.lucene.index.CorruptIndexException:
Problem reading index. (resource=a random IOException (_e.cfe))
[junit4] > at
__randomizedtesting.SeedInfo.seed([F65CD1D4D104665D:9E73BF104F0A3FFD]:0)
[junit4] > at
org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:142)
[junit4] > at
org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:74)
[junit4] > at
org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:143)
[junit4] > at
org.apache.lucene.index.ReadersAndUpdates.getReadOnlyClone(ReadersAndUpdates.java:195)
[junit4] > at
org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:103)
[junit4] > at
org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:473)
[junit4] > at
org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:103)
[junit4] > at
org.apache.lucene.index.BaseIndexFileFormatTestCase.testRandomExceptions(BaseIndexFileFormatTestCase.java:563)
[junit4] > at
org.apache.lucene.index.BaseSegmentInfoFormatTestCase.testRandomExceptions(BaseSegmentInfoFormatTestCase.java:50)
[junit4] > at java.lang.Thread.run(Thread.java:745)
[junit4] > Caused by: java.nio.file.NoSuchFileException: a random
IOException (_e.cfe)
[junit4] > at
org.apache.lucene.store.MockDirectoryWrapper.maybeThrowIOExceptionOnOpen(MockDirectoryWrapper.java:575)
[junit4] > at
org.apache.lucene.store.MockDirectoryWrapper.openInput(MockDirectoryWrapper.java:744)
[junit4] > at
org.apache.lucene.store.Directory.openChecksumInput(Directory.java:119)
[junit4] > at
org.apache.lucene.store.MockDirectoryWrapper.openChecksumInput(MockDirectoryWrapper.java:1072)
[junit4] > at
org.apache.lucene.codecs.lucene50.Lucene50CompoundReader.readEntries(Lucene50CompoundReader.java:105)
[junit4] > at
org.apache.lucene.codecs.lucene50.Lucene50CompoundReader.<init>(Lucene50CompoundReader.java:69)
[junit4] > at
org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.getCompoundReader(Lucene50CompoundFormat.java:71)
[junit4] > at
org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:99)
[junit4] > ... 44 more
{noformat}
Maybe we just need to relax that base test case to accept the new
{{CorruptIndexExcpeption}} as well, and look to its cause to check the
exception message?
Also, I think it'd be a bit better to use our {{expectThrows}} method in the
test case, wrapped around the one line where you try to open an index reader,
instead of the {{@Test(expected = ...)}}, which would pass if
{{CorruptIndexException}} was hit anywhere in that test case?
> Index with missing files should throw CorruptIndexException
> -----------------------------------------------------------
>
> Key: LUCENE-7662
> URL: https://issues.apache.org/jira/browse/LUCENE-7662
> Project: Lucene - Core
> Issue Type: Bug
> Components: core/index
> Affects Versions: 6.4
> Reporter: Mike Drob
> Attachments: LUCENE-7662.patch
>
>
> Similar to what we did in LUCENE-7592 for EOF, we should catch missing files
> and rethrow those as CorruptIndexException.
> If a particular codec can handle missing files, it should be proactive check
> for those optional files and not throw anything, so I think we can safely do
> this at SegmentReader or SegmentCoreReaders level.
> Stack trace copied from SOLR-10006:
> {noformat}
> Caused by: java.nio.file.NoSuchFileException:
> /Users/Erick/apache/solrVersions/trunk/solr/example/cloud/node3/solr/eoe_shard1_replica1/data/index/_1_Lucene50_0.doc
> at
> sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
> at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
> at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
> at
> sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:177)
> at java.nio.channels.FileChannel.open(FileChannel.java:287)
> at java.nio.channels.FileChannel.open(FileChannel.java:335)
> at
> org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:238)
> at
> org.apache.lucene.store.NRTCachingDirectory.openInput(NRTCachingDirectory.java:192)
> at
> org.apache.solr.core.MetricsDirectoryFactory$MetricsDirectory.openInput(MetricsDirectoryFactory.java:334)
> at
> org.apache.lucene.codecs.lucene50.Lucene50PostingsReader.<init>(Lucene50PostingsReader.java:81)
> at
> org.apache.lucene.codecs.lucene50.Lucene50PostingsFormat.fieldsProducer(Lucene50PostingsFormat.java:442)
> at
> org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.<init>(PerFieldPostingsFormat.java:292)
> at
> org.apache.lucene.codecs.perfield.PerFieldPostingsFormat.fieldsProducer(PerFieldPostingsFormat.java:372)
> at
> org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:109)
> at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:74)
> at
> org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:143)
> at
> org.apache.lucene.index.ReadersAndUpdates.getReadOnlyClone(ReadersAndUpdates.java:195)
> at
> org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:103)
> at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:473)
> at
> org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:103)
> at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:79)
> at
> org.apache.solr.core.StandardIndexReaderFactory.newReader(StandardIndexReaderFactory.java:39)
> at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1958)
> ... 12 more
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]