[ https://issues.apache.org/jira/browse/LUCENE-825?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael McCandless resolved LUCENE-825. --------------------------------------- Resolution: Fixed Lucene Fields: [New, Patch Available] (was: [Patch Available, New]) > NullPointerException from SegmentInfos.FindSegmentsFile.run() if > FSDirectory.list() returns NULL > ------------------------------------------------------------------------------------------------- > > Key: LUCENE-825 > URL: https://issues.apache.org/jira/browse/LUCENE-825 > Project: Lucene - Java > Issue Type: Bug > Affects Versions: 2.1 > Reporter: Tim Brennan > Assigned To: Michael McCandless > Fix For: 2.2 > > Attachments: LUCENE-825.patch > > > Found this bug while running unit tests to verify an upgrade of our system > from 1.4.3 to 2.1.0. This bug did *not* occur during 1.4.3, it is new to 2.x > (I'm pretty sure it's 2.1-only) > If the index directory gets deleted out from under Lucene after the > FSDirectory has been created, then attempts to open an IndexWriter or > IndexReader will result in an NPE. Lucene should be throwing an IOException > in this case. > Repro: > 1) Create an FSDirectory pointing somewhere in the filesystem (e.g. > /foo/index/1) > 2) rm -rf the parent dir (rm -rf /foo/index) > 3) Try to open an IndexReader > Result: NullPointerException on line "for(int i=0;i<files.length;i++) { " -- > 'files' is NULL. > > Expect: IOException > .... > This is happening because of a missing NULL check in > SegmentInfos$FindSegmentsFile.run(): > if (0 == method) { > if (directory != null) { > files = directory.list(); > } else { > files = fileDirectory.list(); > } > gen = getCurrentSegmentGeneration(files); > if (gen == -1) { > String s = ""; > for(int i=0;i<files.length;i++) { > s += " " + files[i]; > } > throw new FileNotFoundException("no segments* file found: files:" > + s); > } > } > The FSDirectory constructor will make sure the index dir exists, but if it is > for some reason deleted out from underneath Lucene after the FSDirectory is > instantiated, then java.io.File.list() will return NULL. Probably better to > fix FSDirectory.list() to just check for null and return a 0-length array: > (in org/apache/lucene/store/FSDirectory.java) > 314c314,317 > < return directory.list(IndexFileNameFilter.getFilter()); > --- > > String[] toRet = directory.list(IndexFileNameFilter.getFilter()); > > if (toRet == null) > > return new String[]{}; > > return toRet; -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]