[ 
https://issues.apache.org/jira/browse/HADOOP-19130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

shawn updated HADOOP-19130:
---------------------------
    Description: 
When use fs shell to rename file in ftp server, it always get "Input/output 
error", when full qualified path 
is passed to it(eg. [ftp://user:password@localhost/pathxxx]), the reason is that
changeWorkingDirectory command underneath is being passed a string with 
[file://|file:///] uri prefix which will not be understand 
by ftp server。

!image-2024-03-27-09-59-12-381.png!

 

below, after 
client.changeWorkingDirectory("ftp://mytest:[email protected]/files";)

executed, the workingDirectory of ftp server is still "/", which is incorrect

!image-2024-03-28-09-58-19-721.png|width=678,height=392!

the solution should be pass absoluteSrc.getParent().toUri().getPath().toString 
to avoid
[file://|file:///] uri prefix, like this: 
{code:java}
--- 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;
   }{code}
already related issue  as follows 
https://issues.apache.org/jira/browse/HADOOP-8653

I wonder why this bug haven't been fixed

 

 

  was:
When use fs shell to rename file in ftp server, it always get "Input/output 
error", when full qualified path 
is passed to it(eg. [ftp://user:password@localhost/pathxxx]), the reason is that
changeWorkingDirectory command underneath is being passed a string with 
[file://|file:///] uri prefix which will not be understand 
by ftp server。

!image-2024-03-27-09-59-12-381.png!

 

below, after 
client.changeWorkingDirectory("ftp://mytest:[email protected]/files";)

executed, the workingDirectory of ftp server is still "/", which is incorrect

!image-2024-03-28-09-58-19-721.png|width=493,height=285!

the solution should be pass absoluteSrc.getParent().toUri().getPath().toString 
to avoid
[file://|file:///] uri prefix, like this: 
{code:java}
--- 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;
   }{code}
already related issue  as follows 
https://issues.apache.org/jira/browse/HADOOP-8653

I wonder why this bug haven't been fixed

 

 


> FTPFileSystem rename with full qualified path broken
> ----------------------------------------------------
>
>                 Key: HADOOP-19130
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19130
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: fs
>    Affects Versions: 0.20.2, 3.3.3, 3.3.4, 3.3.6
>            Reporter: shawn
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: image-2024-03-27-09-59-12-381.png, 
> image-2024-03-28-09-58-19-721.png
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> When use fs shell to rename file in ftp server, it always get "Input/output 
> error", when full qualified path 
> is passed to it(eg. [ftp://user:password@localhost/pathxxx]), the reason is 
> that
> changeWorkingDirectory command underneath is being passed a string with 
> [file://|file:///] uri prefix which will not be understand 
> by ftp server。
> !image-2024-03-27-09-59-12-381.png!
>  
> below, after 
> client.changeWorkingDirectory("ftp://mytest:[email protected]/files";)
> executed, the workingDirectory of ftp server is still "/", which is incorrect
> !image-2024-03-28-09-58-19-721.png|width=678,height=392!
> the solution should be pass 
> absoluteSrc.getParent().toUri().getPath().toString to avoid
> [file://|file:///] uri prefix, like this: 
> {code:java}
> --- 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;
>    }{code}
> already related issue  as follows 
> https://issues.apache.org/jira/browse/HADOOP-8653
> I wonder why this bug haven't been fixed
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to