[
https://issues.apache.org/jira/browse/HADOOP-9805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14387356#comment-14387356
]
Colin Patrick McCabe commented on HADOOP-9805:
----------------------------------------------
{code}
366 // Enforce POSIX rename behavior that a source directory replaces an
367 // existing destination if the destination is an empty directory.
On most
368 // platforms, this is already handled by the Java API call above.
Some
369 // platforms (notably Windows) do not provide this behavior, so the
Java API
370 // call renameTo(dstFile) fails. Delete destination and attempt
rename
371 // again.
{code}
This code should not be needed on UNIX, right? This should be inside an {{if
(Shell.WINDOWS)}} block.
This also contains a small race condition where if the rename fails due to an
existing file, but that file is deleted by another thread in between the rename
and the call to {{File#exists}}, we will erroneously return {{false}}. Of
course this bug is Windows-specific and we could easily fix it in a follow-on
JIRA (probably via JNI code).
> Refactor RawLocalFileSystem#rename for improved testability.
> ------------------------------------------------------------
>
> Key: HADOOP-9805
> URL: https://issues.apache.org/jira/browse/HADOOP-9805
> Project: Hadoop Common
> Issue Type: Bug
> Components: fs, test
> Affects Versions: 3.0.0, 1-win, 1.3.0, 2.1.1-beta
> Reporter: Chris Nauroth
> Assignee: Jean-Pierre Matsumoto
> Priority: Minor
> Labels: newbie
> Attachments: HADOOP-9805.001.patch
>
>
> {{RawLocalFileSystem#rename}} contains fallback logic to provide POSIX rename
> behavior on platforms where {{java.io.File#renameTo}} fails. The method
> returns early if {{java.io.File#renameTo}} succeeds, so test runs may not
> cover the fallback logic depending on the platform.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)