[
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 put/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!
in our case, 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 put/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
> 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 put/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!
>
> in our case, 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]