You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2017/10/26 15:54:18 UTC
svn commit: r1813421 - in /commons/proper/vfs/trunk:
commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/
src/changes/
Author: ggregory
Date: Thu Oct 26 15:54:18 2017
New Revision: 1813421
URL: http://svn.apache.org/viewvc?rev=1813421&view=rev
Log:
[VFS-589] SFTP moveTo operation hangs if the server does not support SSH channelExec.
Modified:
commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java
commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
commons/proper/vfs/trunk/src/changes/changes.xml
Modified: commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java?rev=1813421&r1=1813420&r2=1813421&view=diff
==============================================================================
--- commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java (original)
+++ commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java Thu Oct 26 15:54:18 2017
@@ -89,9 +89,9 @@ public final class SftpClientFactory {
session.setPassword(new String(password));
}
- final Integer timeout = builder.getTimeout(fileSystemOptions);
- if (timeout != null) {
- session.setTimeout(timeout.intValue());
+ final Integer sessionTimeout = builder.getSessionTimeoutMillis(fileSystemOptions);
+ if (sessionTimeout != null) {
+ session.setTimeout(sessionTimeout.intValue());
}
final UserInfo userInfo = builder.getUserInfo(fileSystemOptions);
Modified: commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java?rev=1813421&r1=1813420&r2=1813421&view=diff
==============================================================================
--- commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java (original)
+++ commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java Thu Oct 26 15:54:18 2017
@@ -51,6 +51,8 @@ public class SftpFileSystem extends Abst
// private final JSch jSch;
private ChannelSftp idleChannel;
+
+ private final int connectTimeoutMillis;
/**
* Cache for the user ID (-1 when not set)
@@ -66,6 +68,8 @@ public class SftpFileSystem extends Abst
final FileSystemOptions fileSystemOptions) {
super(rootName, null, fileSystemOptions);
this.session = session;
+ final SftpFileSystemConfigBuilder builder = SftpFileSystemConfigBuilder.getInstance();
+ this.connectTimeoutMillis = builder.getConnectTimeoutMillis(fileSystemOptions);
}
@Override
@@ -98,7 +102,7 @@ public class SftpFileSystem extends Abst
idleChannel = null;
} else {
channel = (ChannelSftp) session.openChannel("sftp");
- channel.connect();
+ channel.connect(connectTimeoutMillis);
final Boolean userDirIsRoot = SftpFileSystemConfigBuilder.getInstance()
.getUserDirIsRoot(getFileSystemOptions());
final String workingDirectory = getRootName().getPath();
@@ -271,7 +275,7 @@ public class SftpFileSystem extends Abst
channel.setInputStream(null);
try (final InputStreamReader stream = new InputStreamReader(channel.getInputStream())) {
channel.setErrStream(System.err, true);
- channel.connect();
+ channel.connect(connectTimeoutMillis);
// Read the stream
final char[] buffer = new char[EXEC_BUFFER_SIZE];
Modified: commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java?rev=1813421&r1=1813420&r2=1813421&view=diff
==============================================================================
--- commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java (original)
+++ commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java Thu Oct 26 15:54:18 2017
@@ -30,6 +30,10 @@ import com.jcraft.jsch.UserInfo;
* The config builder for various SFTP configuration options.
*/
public final class SftpFileSystemConfigBuilder extends FileSystemConfigBuilder {
+
+ private static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 0;
+ private static final int DEFAULT_SESSION_TIMEOUT_MILLIS = 0;
+
/**
* Proxy type.
*/
@@ -78,12 +82,31 @@ public final class SftpFileSystemConfigB
}
}
+ private static final String _PREFIX = SftpFileSystemConfigBuilder.class.getName();
+
+ private static final SftpFileSystemConfigBuilder BUILDER = new SftpFileSystemConfigBuilder();
+
+ private static final String COMPRESSION = _PREFIX + "COMPRESSION";
+
+ private static final String CONNECT_TIMEOUT_MILLIS = _PREFIX + ".CONNECT_TIMEOUT_MILLIS";
+ private static final String ENCODING = _PREFIX + ".ENCODING";
+ private static final String HOST_KEY_CHECK_ASK = "ask";
+ private static final String HOST_KEY_CHECK_NO = "no";
+ private static final String HOST_KEY_CHECK_YES = "yes";
+ private static final String IDENTITIES = _PREFIX + ".IDENTITIES";
+ private static final String IDENTITY_REPOSITORY_FACTORY = _PREFIX + "IDENTITY_REPOSITORY_FACTORY";
+ private static final String KNOWN_HOSTS = _PREFIX + ".KNOWN_HOSTS";
+ private static final String PREFERRED_AUTHENTICATIONS = _PREFIX + ".PREFERRED_AUTHENTICATIONS";
+ private static final String PROXY_COMMAND = _PREFIX + ".PROXY_COMMAND";
+
+ private static final String PROXY_HOST = _PREFIX + ".PROXY_HOST";
/** HTTP Proxy. */
public static final ProxyType PROXY_HTTP = new ProxyType("http");
-
+ private static final String PROXY_OPTIONS = _PREFIX + ".PROXY_OPTIONS";
+ private static final String PROXY_PASSWORD = _PREFIX + ".PROXY_PASSWORD";
+ private static final String PROXY_PORT = _PREFIX + ".PROXY_PORT";
/** SOCKS Proxy. */
public static final ProxyType PROXY_SOCKS5 = new ProxyType("socks");
-
/**
* Connects to the SFTP server through a remote host reached by SSH.
* <p>
@@ -97,33 +120,11 @@ public final class SftpFileSystemConfigB
*/
public static final ProxyType PROXY_STREAM = new ProxyType("stream");
- private static final String _PREFIX = SftpFileSystemConfigBuilder.class.getName();
- private static final SftpFileSystemConfigBuilder BUILDER = new SftpFileSystemConfigBuilder();
- private static final String COMPRESSION = _PREFIX + "COMPRESSION";
- private static final String HOST_KEY_CHECK_ASK = "ask";
- private static final String HOST_KEY_CHECK_NO = "no";
- private static final String HOST_KEY_CHECK_YES = "yes";
- private static final String IDENTITIES = _PREFIX + ".IDENTITIES";
- private static final String IDENTITY_REPOSITORY_FACTORY = _PREFIX + "IDENTITY_REPOSITORY_FACTORY";
- private static final String KNOWN_HOSTS = _PREFIX + ".KNOWN_HOSTS";
- private static final String PREFERRED_AUTHENTICATIONS = _PREFIX + ".PREFERRED_AUTHENTICATIONS";
-
- private static final String PROXY_HOST = _PREFIX + ".PROXY_HOST";
- private static final String PROXY_USER = _PREFIX + ".PROXY_USER";
- private static final String PROXY_OPTIONS = _PREFIX + ".PROXY_OPTIONS";
private static final String PROXY_TYPE = _PREFIX + ".PROXY_TYPE";
- private static final String PROXY_PORT = _PREFIX + ".PROXY_PORT";
- private static final String PROXY_PASSWORD = _PREFIX + ".PROXY_PASSWORD";
- private static final String PROXY_COMMAND = _PREFIX + ".PROXY_COMMAND";
-
+ private static final String PROXY_USER = _PREFIX + ".PROXY_USER";
+ private static final String SESSION_TIMEOUT_MILLIS = _PREFIX + ".TIMEOUT";
private static final String STRICT_HOST_KEY_CHECKING = _PREFIX + ".STRICT_HOST_KEY_CHECKING";
- private static final String TIMEOUT = _PREFIX + ".TIMEOUT";
private static final String USER_DIR_IS_ROOT = _PREFIX + ".USER_DIR_IS_ROOT";
- private static final String ENCODING = _PREFIX + ".ENCODING";
-
- private SftpFileSystemConfigBuilder() {
- super("sftp.");
- }
/**
* Gets the singleton builder.
@@ -134,6 +135,10 @@ public final class SftpFileSystemConfigB
return BUILDER;
}
+ private SftpFileSystemConfigBuilder() {
+ super("sftp.");
+ }
+
/**
* @param opts The FileSystem options.
* @return The names of the compression algorithms, comma-separated.
@@ -149,6 +154,16 @@ public final class SftpFileSystemConfigB
}
/**
+ * @param opts The FileSystem options.
+ * @return The connect timeout value in milliseconds.
+ * @see #setConnectTimeoutMillis
+ * @since 2.3
+ */
+ public Integer getConnectTimeoutMillis(final FileSystemOptions opts) {
+ return this.getInteger(opts, CONNECT_TIMEOUT_MILLIS, DEFAULT_CONNECT_TIMEOUT_MILLIS);
+ }
+
+ /**
* Gets the file name encoding.
*
* @param opts The FileSystem options.
@@ -310,6 +325,16 @@ public final class SftpFileSystemConfigB
/**
* @param opts The FileSystem options.
+ * @return The session timeout value in milliseconds.
+ * @see #setSessionTimeoutMillis
+ * @since 2.3
+ */
+ public Integer getSessionTimeoutMillis(final FileSystemOptions opts) {
+ return this.getInteger(opts, SESSION_TIMEOUT_MILLIS, DEFAULT_SESSION_TIMEOUT_MILLIS);
+ }
+
+ /**
+ * @param opts The FileSystem options.
* @return the option value The host key checking.
* @see #setStrictHostKeyChecking(FileSystemOptions, String)
*/
@@ -321,9 +346,11 @@ public final class SftpFileSystemConfigB
* @param opts The FileSystem options.
* @return The timeout value in milliseconds.
* @see #setTimeout
+ * @deprecated Use {@link #getSessionTimeoutMillis(FileSystemOptions)}
*/
+ @Deprecated
public Integer getTimeout(final FileSystemOptions opts) {
- return this.getInteger(opts, TIMEOUT);
+ return this.getInteger(opts, SESSION_TIMEOUT_MILLIS);
}
/**
@@ -364,6 +391,17 @@ public final class SftpFileSystemConfigB
}
/**
+ * Sets the timeout value to create a Jsch connection.
+ *
+ * @param opts The FileSystem options.
+ * @param timeout The connect timeout in milliseconds.
+ * @since 2.3
+ */
+ public void setConnectTimeoutMillis(final FileSystemOptions opts, final Integer timeout) {
+ this.setParam(opts, CONNECT_TIMEOUT_MILLIS, timeout);
+ }
+
+ /**
* Sets the file name encoding.
*
* @param opts The FileSystem options.
@@ -539,6 +577,17 @@ public final class SftpFileSystemConfigB
}
/**
+ * Sets the timeout value on Jsch session.
+ *
+ * @param opts The FileSystem options.
+ * @param timeout The session timeout in milliseconds.
+ * @since 2.3
+ */
+ public void setSessionTimeoutMillis(final FileSystemOptions opts, final Integer timeout) {
+ this.setParam(opts, SESSION_TIMEOUT_MILLIS, timeout);
+ }
+
+ /**
* Configures the host key checking to use.
* <p>
* Valid arguments are: {@code "yes"}, {@code "no"} and {@code "ask"}.
@@ -566,9 +615,11 @@ public final class SftpFileSystemConfigB
*
* @param opts The FileSystem options.
* @param timeout The timeout in milliseconds.
+ * @deprecated Use {@link #setSessionTimeoutMillis(FileSystemOptions, Integer)}
*/
+ @Deprecated
public void setTimeout(final FileSystemOptions opts, final Integer timeout) {
- this.setParam(opts, TIMEOUT, timeout);
+ this.setParam(opts, SESSION_TIMEOUT_MILLIS, timeout);
}
/**
Modified: commons/proper/vfs/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1813421&r1=1813420&r2=1813421&view=diff
==============================================================================
--- commons/proper/vfs/trunk/src/changes/changes.xml (original)
+++ commons/proper/vfs/trunk/src/changes/changes.xml Thu Oct 26 15:54:18 2017
@@ -53,6 +53,9 @@ The <action> type attribute can be add,u
<action issue="VFS-646" dev="ggregory" type="update">
Update Apache Commons Compress from 1.14 to 1.15.
</action>
+ <action issue="VFS-589" dev="ggregory" type="add" due-to="L, Gary Gregory">
+ SFTP moveTo operation hangs if the server does not support SSH channelExec.
+ </action>
</release>
<release version="2.2" date="2017-10-06" description="New features and bug fix release.">
<action issue="VFS-642" dev="pschumacher" type="update" due-to="ilangoldfeld">