diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java index 0d3acb4d9132b7ee0afaf80729de0d7ddaa627b2..bd3b9b5ac4d0b54f77d341895c4a1b356c5bf7d8 100644 --- a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java +++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java @@ -1,5 +1,16 @@ package cz.it4i.fiji.scpclient; +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelExec; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.ChannelSftp.LsEntry; +import com.jcraft.jsch.Identity; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpException; +import com.jcraft.jsch.UserInfo; + import java.io.Closeable; import java.io.IOException; import java.io.InputStream; @@ -16,20 +27,15 @@ import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.jcraft.jsch.Channel; -import com.jcraft.jsch.ChannelExec; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.ChannelSftp.LsEntry; -import com.jcraft.jsch.Identity; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.Session; -import com.jcraft.jsch.SftpException; -import com.jcraft.jsch.UserInfo; - public class ScpClient implements Closeable { public static final Logger log = LoggerFactory.getLogger(cz.it4i.fiji.scpclient.ScpClient.class); + + + private static final int MAX_NUMBER_OF_CONNECTION_ATTEMPTS = 3; + + + private static final long TIMEOUT_BETWEEN_CONNECTION_ATTEMPTS = 500; private String hostName; @@ -349,9 +355,27 @@ public class ScpClient implements Closeable { session.setUserInfo(ui); } - if (!session.isConnected()) { + int connectRetry = 0; + while (!session.isConnected()) { //log.info("connect"); - session.connect(); + try { + session.connect(); + } + catch(JSchException e) { + if(e.getMessage().contains("Auth fail") && connectRetry < MAX_NUMBER_OF_CONNECTION_ATTEMPTS) { + connectRetry++; + try { + Thread.sleep(TIMEOUT_BETWEEN_CONNECTION_ATTEMPTS); + } + catch (InterruptedException exc) { + log.info("Interruption detected"); + throw new JSchException(exc.getMessage(), exc); + } + continue; + } + throw e; + } + } return session; }