[ https://issues.apache.org/jira/browse/HADOOP-8653?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Arun C Murthy updated HADOOP-8653: ---------------------------------- Fix Version/s: (was: 2.0.1-alpha) 3.0.0 > 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: 0.20.2, 2.0.0-alpha > Reporter: Karel Kolman > Fix For: 3.0.0 > > Attachments: HDFS-8653-1.patch > > > 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 For more information on JIRA, see: http://www.atlassian.com/software/jira