[ http://issues.apache.org/jira/browse/LUCENE-425?page=comments#action_12426910 ] Michael McCandless commented on LUCENE-425: -------------------------------------------
There was a recent thread on java-user that looks very similar to this issue: http://www.gossamer-threads.com/lists/lucene/java-user/38669 When Lucene writes a new "segments" or new "deletable" file it first writes to X.new and then renames X.new --> X. Apparently that renameTo can sometimes fail, even though both the X.new and the X file are "closed" from Java. The "best guess" from that discussion is that there is a JVM bug on certain JVMs on Windows, whereby a file handle (at the Windows OS level) is held open even after from Java it has been "closed". Ant has a workaround for this issue: force a GC, wait, and then retry. I don't really like that workaround for Lucene because we should not suddenly / unexpectedly do a system level action like forcing GC -- it's a "leaky abstraction" (http://www.joelonsoftware.com/articles/LeakyAbstractions.html). Which JVM are you using? I couldn't reproduce this; I made a small change to the IndexFiles demo command-line tool and then refreshed the view from Windows Explorer. On Sun JDK 1.4.2_10 and Sun JDK 1.5.0_07 I couldn't get the IOException. Issue LUCNE-554 also proposes more robust logic around opening the .NEW file if it exists. I think that makes alot of sense. > "Cannot rename segments.new to segments" > ---------------------------------------- > > Key: LUCENE-425 > URL: http://issues.apache.org/jira/browse/LUCENE-425 > Project: Lucene - Java > Issue Type: Bug > Components: Index > Affects Versions: 1.4 > Environment: Operating System: Windows XP > Platform: PC > Reporter: Mikko Noromaa > Assigned To: Lucene Developers > > AddDocument periodically fails with "Cannot rename segments.new to segments". > Sometimes it happens after 10,000 documents, sometimes after 200,000 > documents. > My index is placed on a FAT partition. My Lucene version is 1.4.3. I am using > a single IndexWriter object and doing all AddDocuments calls serially from a > single thread. > I saw some discussion about this problem in the mailing lists, but looks like > the problem wasn't completely eliminated yet. > My suggested solutions are as follows: > - If renameTo() fails, wait some time and retry. After this, apply the other > methods that are now in FSDirectory.java. Retry them as well after waiting > for > some time. > - In the IndexWriter constructor, check for 'segments.new' if 'segments' > cannot be found. This would allow recovery if FSDirectory failed on a > previous > run. Now I have to write the recovery code myself outside of Lucene. -- 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]