[ 
https://issues.apache.org/jira/browse/LUCENE-6169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14270092#comment-14270092
 ] 

Uwe Schindler commented on LUCENE-6169:
---------------------------------------

As a quick fix so we can still run the tests on Java 9, I will commit a 
workaround and disable the assert on Java 9.

I will keep this issue open to keep track and revert the workaround once Oracle 
fixed the problem in some way.

> Recent Java 9 commit breaks fsync on directory
> ----------------------------------------------
>
>                 Key: LUCENE-6169
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6169
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/store
>            Reporter: Uwe Schindler
>              Labels: Java9
>
> I open this issue to keep track of the communication with Oracle and OpenJDK 
> about this:
> Basically, what happens: In LUCENE-5588 we added support to FSDirectory to be 
> able to sync on directory metadata changes (means the contents of the 
> directory itsself). This is very important on Unix system (maybe also on 
> Windows), because fsyncing a single file does not necessarily writes the 
> directory's contents to disk. Lucene uses this for commits. We first do an 
> atomic rename of the segments file  (to make the commit public), but we have 
> to be sure that the rename operation is written to disk. Because of that we 
> must fsync the directory.
> To enforce this, you open a directory for read and then call fsync. In java 
> this can be done by opening a FileChannel on the direczory(for read) and call 
> fc.force() on it.
> Unfortunately the commit 
> http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/e5b66323ae45 in OpenJDK 9 break 
> this. The corresponding issue is 
> https://bugs.openjdk.java.net/browse/JDK-8066915. The JDK now explicitly 
> checks if a file is a directory and disallows opening a FileChannel on it. 
> This breaks our commit safety.
> Because this behaviour is undocumented (not even POSIX has explicit semantics 
> for syncing directories), we know that it worked at least on MacOSX and 
> Linux. The code in IOUtils is currently written in a way that it tries to 
> sync the diretory, but swallows any Exception. So this change does not break 
> Liucene, but it breaks our commit safety. During testing we assert that the 
> fsync actually works on Linux and MacOSX, in production code the user will 
> notice nothing.
> We should take action and contact Alan Bateman about his commit and this 
> issue on the mailing list, possibly through Rory O'Donnell.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to