HADOOP-11100. Support to configure ftpClient.setControlKeepAliveTimeout. Contributed by Adam Antal.
Signed-off-by: Xiao Chen <x...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/24dc068a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/24dc068a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/24dc068a Branch: refs/heads/HDDS-4 Commit: 24dc068a361648b4e59e1807b07ff2239f41c740 Parents: d54f559 Author: Adam Antal <adam.an...@cloudera.com> Authored: Wed Oct 17 11:32:17 2018 -0700 Committer: Xiao Chen <x...@apache.org> Committed: Wed Oct 17 11:34:50 2018 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/fs/ftp/FTPFileSystem.java | 13 +++++++++++++ .../src/main/resources/core-default.xml | 8 ++++++++ .../hadoop/conf/TestCommonConfigurationFields.java | 1 + .../org/apache/hadoop/fs/ftp/TestFTPFileSystem.java | 15 +++++++++++++++ 4 files changed, 37 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/24dc068a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ftp/FTPFileSystem.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ftp/FTPFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ftp/FTPFileSystem.java index 676c207..4b144bf 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ftp/FTPFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/ftp/FTPFileSystem.java @@ -62,6 +62,7 @@ public class FTPFileSystem extends FileSystem { public static final int DEFAULT_BUFFER_SIZE = 1024 * 1024; public static final int DEFAULT_BLOCK_SIZE = 4 * 1024; + public static final long DEFAULT_TIMEOUT = 0; public static final String FS_FTP_USER_PREFIX = "fs.ftp.user."; public static final String FS_FTP_HOST = "fs.ftp.host"; public static final String FS_FTP_HOST_PORT = "fs.ftp.host.port"; @@ -71,6 +72,7 @@ public class FTPFileSystem extends FileSystem { public static final String FS_FTP_TRANSFER_MODE = "fs.ftp.transfer.mode"; public static final String E_SAME_DIRECTORY_ONLY = "only same directory renames are supported"; + public static final String FS_FTP_TIMEOUT = "fs.ftp.timeout"; private URI uri; @@ -150,6 +152,7 @@ public class FTPFileSystem extends FileSystem { client.setFileTransferMode(getTransferMode(conf)); client.setFileType(FTP.BINARY_FILE_TYPE); client.setBufferSize(DEFAULT_BUFFER_SIZE); + setTimeout(client, conf); setDataConnectionMode(client, conf); } else { throw new IOException("Login failed on server - " + host + ", port - " @@ -160,6 +163,16 @@ public class FTPFileSystem extends FileSystem { } /** + * Set the FTPClient's timeout based on configuration. + * FS_FTP_TIMEOUT is set as timeout (defaults to DEFAULT_TIMEOUT). + */ + @VisibleForTesting + void setTimeout(FTPClient client, Configuration conf) { + long timeout = conf.getLong(FS_FTP_TIMEOUT, DEFAULT_TIMEOUT); + client.setControlKeepAliveTimeout(timeout); + } + + /** * Set FTP's transfer mode based on configuration. Valid values are * STREAM_TRANSFER_MODE, BLOCK_TRANSFER_MODE and COMPRESSED_TRANSFER_MODE. * <p> http://git-wip-us.apache.org/repos/asf/hadoop/blob/24dc068a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml index 32dd622..599396f 100644 --- a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml +++ b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml @@ -926,6 +926,14 @@ </property> <property> + <name>fs.ftp.timeout</name> + <value>0</value> + <description> + FTP filesystem's timeout in seconds. + </description> +</property> + +<property> <name>fs.df.interval</name> <value>60000</value> <description>Disk usage statistics refresh interval in msec.</description> http://git-wip-us.apache.org/repos/asf/hadoop/blob/24dc068a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestCommonConfigurationFields.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestCommonConfigurationFields.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestCommonConfigurationFields.java index e10617d..2766b56 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestCommonConfigurationFields.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestCommonConfigurationFields.java @@ -93,6 +93,7 @@ public class TestCommonConfigurationFields extends TestConfigurationFieldsBase { xmlPropsToSkipCompare.add("fs.ftp.user.localhost"); xmlPropsToSkipCompare.add("fs.ftp.data.connection.mode"); xmlPropsToSkipCompare.add("fs.ftp.transfer.mode"); + xmlPropsToSkipCompare.add("fs.ftp.timeout"); xmlPropsToSkipCompare.add("hadoop.tmp.dir"); xmlPropsToSkipCompare.add("nfs3.mountd.port"); xmlPropsToSkipCompare.add("nfs3.server.port"); http://git-wip-us.apache.org/repos/asf/hadoop/blob/24dc068a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/ftp/TestFTPFileSystem.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/ftp/TestFTPFileSystem.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/ftp/TestFTPFileSystem.java index aab52ae..3d41ccb 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/ftp/TestFTPFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/ftp/TestFTPFileSystem.java @@ -137,4 +137,19 @@ public class TestFTPFileSystem { return ftpFile; } + @Test + public void testFTPSetTimeout() { + Configuration conf = new Configuration(); + FTPClient client = new FTPClient(); + FTPFileSystem ftp = new FTPFileSystem(); + + ftp.setTimeout(client, conf); + assertEquals(client.getControlKeepAliveTimeout(), + FTPFileSystem.DEFAULT_TIMEOUT); + + long timeout = 600; + conf.setLong(FTPFileSystem.FS_FTP_TIMEOUT, timeout); + ftp.setTimeout(client, conf); + assertEquals(client.getControlKeepAliveTimeout(), timeout); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org