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

Ivan Mitic commented on HADOOP-12550:
-------------------------------------

bq. the msdn link mentioned that MOVEFILE_REPLACE_EXISTING cannot be used if 
lpNewFileName or lpExistingFileName names a directory. But it does not describe 
the results if it is used. Maybe unsupported or unpredictable? 
This is a good point, I somehow missed this part. Should we instead check if 
src is a directory or not, and depending on that use MOVEFILE_REPLACE_EXISTING 
flag? Expectation on the call site is that renameTo() also works on folders, 
right?

> NativeIO#renameTo on Windows cannot replace an existing file at the 
> destination.
> --------------------------------------------------------------------------------
>
>                 Key: HADOOP-12550
>                 URL: https://issues.apache.org/jira/browse/HADOOP-12550
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: native
>         Environment: Windows
>            Reporter: Chris Nauroth
>            Assignee: Chris Nauroth
>         Attachments: HADOOP-12550.001.patch, HADOOP-12550.002.patch
>
>
> {{NativeIO#renameTo}} currently has different semantics on Linux vs. Windows 
> if a file already exists at the destination.  On Linux, it's a passthrough to 
> the [rename|http://linux.die.net/man/2/rename] syscall, which will replace an 
> existing file at the destination.  On Windows, it's a passthrough to 
> [MoveFile|https://msdn.microsoft.com/en-us/library/windows/desktop/aa365239%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396],
>  which cannot replace an existing file at the destination and instead 
> triggers an error.  The easiest way to observe this difference is to run the 
> HDFS test {{TestRollingUpgrade#testRollback}}.  This fails on Windows due to 
> a block recovery after truncate trying to replace a block at an existing 
> destination path.  This issue proposes to use 
> [MoveFileEx|https://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx]
>  on Windows with the {{MOVEFILE_REPLACE_EXISTING}} flag.



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

Reply via email to