You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Karel Kolman (JIRA)" <ji...@apache.org> on 2012/08/06 13:09:02 UTC

[jira] [Created] (HADOOP-8653) FTPFileSystem rename broken

Karel Kolman created HADOOP-8653:
------------------------------------

             Summary: FTPFileSystem rename broken
                 Key: HADOOP-8653
                 URL: https://issues.apache.org/jira/browse/HADOOP-8653
             Project: Hadoop Common
          Issue Type: Bug
          Components: fs
    Affects Versions: 2.0.0-alpha, 0.20.2
            Reporter: Karel Kolman


The FTPFileSystem.rename(FTPClient client, Path src, Path dst) method is broken.

The changeWorkingDirectory command underneath is being passed a string with file:// uri prefix (which FTP server does not understand obviously)

{noformat}

INFO [2012-08-06 12:59:39] (DefaultSession.java:297) - Received command: [CWD ftp://localhost:61246/tmp/myfile]
 WARN [2012-08-06 12:59:39] (AbstractFakeCommandHandler.java:213) - Error handling command: Command[CWD:[ftp://localhost:61246/tmp/myfile]]; org.mockftpserver.fake.filesystem.FileSystemException: /ftp://localhost:61246/tmp/myfile
org.mockftpserver.fake.filesystem.FileSystemException: /ftp://localhost:61246/tmp/myfile
	at org.mockftpserver.fake.command.AbstractFakeCommandHandler.verifyFileSystemCondition(AbstractFakeCommandHandler.java:264)
	at org.mockftpserver.fake.command.CwdCommandHandler.handle(CwdCommandHandler.java:44)
	at org.mockftpserver.fake.command.AbstractFakeCommandHandler.handleCommand(AbstractFakeCommandHandler.java:76)
	at org.mockftpserver.core.session.DefaultSession.readAndProcessCommand(DefaultSession.java:421)
	at org.mockftpserver.core.session.DefaultSession.run(DefaultSession.java:384)
	at java.lang.Thread.run(Thread.java:680)

{noformat}

The solution would be this:

{noformat}
--- a/FTPFileSystem.java
+++ b/FTPFileSystem.java
@@ -549,15 +549,15 @@ public class FTPFileSystem extends FileSystem {
       throw new IOException("Destination path " + dst
           + " already exist, cannot rename!");
     }
-    String parentSrc = absoluteSrc.getParent().toUri().toString();
-    String parentDst = absoluteDst.getParent().toUri().toString();
+    URI parentSrc = absoluteSrc.getParent().toUri();
+    URI parentDst = absoluteDst.getParent().toUri();
     String from = src.getName();
     String to = dst.getName();
-    if (!parentSrc.equals(parentDst)) {
+    if (!parentSrc.toString().equals(parentDst.toString())) {
       throw new IOException("Cannot rename parent(source): " + parentSrc
           + ", parent(destination):  " + parentDst);
     }
-    client.changeWorkingDirectory(parentSrc);
+    client.changeWorkingDirectory(parentSrc.getPath().toString());
     boolean renamed = client.rename(from, to);
     return renamed;
   }

{noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira