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