[
https://issues.apache.org/jira/browse/HADOOP-9507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13719993#comment-13719993
]
Chris Nauroth commented on HADOOP-9507:
---------------------------------------
{quote}
I don't know if this new approach would work if the destination is on a
separate drive - can you check?
{quote}
Thanks for catching this, Mostafa. That's a good point. No,
{{java.io.File#renameTo}} fails when attempting to rename from one drive to
another. Likewise on Linux, you can't cross different file systems.
[~szetszwo], I think we need to go with the prior version of the patch that
does copying. Does that sound OK to commit?
After we fully migrate to Java 7, we can come back and do an optimization to
check if source and destination are on the same file system, and then use
delete/rename. This can only be done with the new Java 7 file APIs, so we
can't do it right now while we're still supporting Java 6.
> LocalFileSystem rename() is broken in some cases when destination exists
> ------------------------------------------------------------------------
>
> Key: HADOOP-9507
> URL: https://issues.apache.org/jira/browse/HADOOP-9507
> Project: Hadoop Common
> Issue Type: Bug
> Components: fs
> Affects Versions: 3.0.0, 1-win, 2.1.0-beta, 1.3.0
> Reporter: Mostafa Elhemali
> Assignee: Chris Nauroth
> Priority: Minor
> Attachments: HADOOP-9507-branch-1.1.patch,
> HADOOP-9507-branch-1.3.patch, HADOOP-9507-branch-1-win.1.patch,
> HADOOP-9507-branch-1-win.3.patch, HADOOP-9507.branch-1-win.patch,
> HADOOP-9507-trunk.1.patch, HADOOP-9507-trunk.2.patch,
> HADOOP-9507-trunk.3.patch
>
>
> The rename() method in RawLocalFileSystem uses FileUtil.copy() without
> realizing that FileUtil.copy() has a special behavior that if you're copying
> /foo to /bar and /bar exists and is a directory, it'll copy /foo inside /bar
> instead of overwriting it, which is not what rename() wants. So you end up
> with weird behaviors like in this repro:
> {code}
> c:
> cd \
> md Foo
> md Bar
> md Foo\X
> md Bar\X
> hadoop fs -mv file:///c:/Foo file:///c:/Bar
> {code}
> At the end of this, you would expect to find only Bar\X, but you instead find
> Bar\X\X.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira