RFR 8023173: FileDescriptor should respect append flag

Ivan Gerasimov ivan.gerasimov at oracle.com
Tue Oct 7 08:08:20 UTC 2014

Thanks Martin for the comments!

On 06.10.2014 21:22, Martin Buchholz wrote:
> Thanks for tackling this difficult area!
> Alan is the most qualified to review, but I'll throw in some comments.
> The title of the bug in jira doesn't match the one in the webrev - 
> they should be the same.
Do you mean the summary in the regression test?
I'll update the Jira bug's title, the thread subject and the summary to 
be the same.

> I'm not sure, but it looks like getAppend is called even on 
> non-Windows platforms, but there should be no need?

There is one place where we need it: in FileChannelImpl.position(), if 
in append mode, we should return the file size (see JDK-6526860).
As the append flag was moved from FileChannelImpl down to 
FileDescriptor, we need a way to retrieve this information back, so 
getAppend() had to be introduced.
This is applicable to both Windows and Unix.

This code seems already to be covered by 
java/nio/channels/FileChannel/AtomicAppend.java, so I'm not introducing 
a new test for it.

Sincerely yours,

> On Mon, Oct 6, 2014 at 3:41 AM, Ivan Gerasimov 
> <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>     Hello everybody!
>     The append mode is emulated on Windows, therefore we have to keep
>     a flag indicating that.
>     With the current implementation, the FileDescriptor does not know
>     if the file were opened with O_APPEND, and the flag is maintained
>     at the upper level.
>     This can cause inconsistency, when the FileDescriptor is reused to
>     construct a new FileOutputStream, as there is no information
>     available about the append/non-append mode.
>     Even though the solution is quite straight-forward: moving the
>     flag from FileOutputStream,  FileDispatcherImpl and
>     FileChannelImpl to the lower level of FileDescriptor, it touches
>     20 files across the source-code base.
>     BUGURL: https://bugs.openjdk.java.net/browse/JDK-8023173
>     WEBREV: http://cr.openjdk.java.net/~igerasim/8023173/0/webrev/
>     <http://cr.openjdk.java.net/%7Eigerasim/8023173/0/webrev/>
>     With the fix, all the io/nio tests, including the new one, pass on
>     all available platforms.
>     Would you please help review this fix?
>     Sincerely yours,
>     Ivan

More information about the core-libs-dev mailing list