[
https://issues.apache.org/jira/browse/LUCENE-6169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14270109#comment-14270109
]
ASF subversion and git services commented on LUCENE-6169:
---------------------------------------------------------
Commit 1650391 from [~thetaphi] in branch 'dev/branches/branch_5x'
[ https://svn.apache.org/r1650391 ]
Merged revision(s) 1650390 from lucene/dev/trunk:
LUCENE-6169: Disable the fsync on directory assert for Java 9+, because in Java
9 opening a FileChannel on directory no longer works
> 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: [email protected]
For additional commands, e-mail: [email protected]