hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Karel Kolman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-8653) FTPFileSystem rename broken
Date Mon, 06 Aug 2012 16:14:02 GMT

    [ https://issues.apache.org/jira/browse/HADOOP-8653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13429224#comment-13429224
] 

Karel Kolman commented on HADOOP-8653:
--------------------------------------

@Daryn i don't think you are right here, the first log line from ftp server reads:

{noformat}
 Received command: [CWD ftp://localhost:61246/tmp/myfile]
{noformat}

while it should receive only [CWD /tmp/myfile] from hadoop's FTPFileSystem

Also all other calls to changeWorkingDirectory in FTPFileSystem use a variant of parent.toUri().getPath()
(parent.toUri().getPath().toString())
{noformat}
FTPFileSystem.java-6393-    // FSDataInputStream.
FTPFileSystem.java:6419:    client.changeWorkingDirectory(parent.toUri().getPath());
--
FTPFileSystem.java-8320-    // FSDataOutputStream.
FTPFileSystem.java:8347:    client.changeWorkingDirectory(parent.toUri().getPath());
--
FTPFileSystem.java-17201-        String parentDir = parent.toUri().getPath();
FTPFileSystem.java:17254:        client.changeWorkingDirectory(parentDir);
--
FTPFileSystem.java-19688-    }
FTPFileSystem.java:19694:    client.changeWorkingDirectory(parentSrc);
{noformat}

so i think it should be patched like this

I'm sorry im not providing a unit/integration testcase, is there one ? Basically this was
caught by our integration tests trying to use FTPFileSystem for some file renaming.
                
> 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
>
> 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

        

Mime
View raw message