Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-8653

FTPFileSystem rename broken

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Patch Available
    • Major
    • Resolution: Unresolved
    • 0.20.2, 2.0.0-alpha
    • None
    • fs

    Description

      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)

      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)
      
      

      The solution would be this:

      --- 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;
         }
      
      

      Attachments

        1. HDFS-8653-1.patch
          1 kB
          Karel Kolman

        Activity

          People

            Unassigned Unassigned
            karel.kolman Karel Kolman
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: