IndexReader.isCurrent fails when using two IndexReaders -------------------------------------------------------
Key: LUCENE-758 URL: http://issues.apache.org/jira/browse/LUCENE-758 Project: Lucene - Java Issue Type: Bug Affects Versions: 2.0.1 Environment: Operating System: other Platform: other Reporter: Bernhard Messer Priority: Minor there is a problem in IndexReader.isCurrent() if using two reader instances where one of them is based on a RAMDirectory. If there is an index and we open two IndexReaders where one is based on a FSDirectory and the other is based on a RAMDirectory, the IndexReader using the RAMDirectory does not recognize when the underlaying index has changed. The method IndexReader.isCurrent() always returns true. The testcase below shows the problem. I did not find an ideal solution to solve the problem. I think the best way would be to change the IndexReader.isCurrent() implementation from: public boolean isCurrent() throws IOException { return SegmentInfos.readCurrentVersion(directory) == segmentInfos.getVersion(); } to something like: public boolean isCurrent() throws IOException { return directory.readCurrentVersion() == segmentInfos.getVersion(); } As far as i can see this would work for FS- and RAMDirectory. But then the implementing Directory classes have to know about "segment" files and there formating details. What do others think ? /** * additional testcase for IndexReaderTest to show the problem when using two different Readers */ public void testIsCurrentWithCombined() throws Exception { String tempDir = System.getProperty("tempDir"); if (tempDir == null) throw new IOException("tempDir undefined, cannot run test"); File indexDir = new File(tempDir, "lucenetestiscurrent"); Directory fsStore = FSDirectory.getDirectory(indexDir, true); IndexWriter writer = new IndexWriter(fsStore, new SimpleAnalyzer(), true); addDocumentWithFields(writer); writer.close(); IndexReader reader1 = IndexReader.open(fsStore); IndexReader reader2 = IndexReader.open(new RAMDirectory(fsStore)); assertTrue(reader1.isCurrent()); assertTrue(reader2.isCurrent()); reader1.deleteDocument(0); reader1.close(); // BUG: reader based on the RAMDirectory does not recognize the index change. assertFalse(reader2.isCurrent()); reader2.close(); } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]