Public bug reported:
Hi,
I found a bug with SFTP connection, the bug is the conection with the storage
server never closes, and creates more connections every time.
For example when upload the chunks the conection is already stablished and for
each chunk open a conection because in the SftpTransferManager in funtion
upload conects with the storage and the application not checks the connection.
@Override
public void upload(File localFile, RemoteFile remoteFile) throws
StorageException {
connect();
And the function connects every time creates a new session and not closes the
last session:
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.connect();
I solved checking the connection when try to connect with the storage.
@Override
public void connect() throws StorageConnectException {
boolean isConnected = false;
if(session != null){
if(session.isConnected()){
if(sftp != null){
if (sftp.isConnected()){
isConnected = true;
}else{
session.disconnect();
}
} else{
session.disconnect();
}
}
}
if(!isConnected){
for (int i=0; i<CONNECT_RETRY_COUNT; i++) {
try {
if (logger.isLoggable(Level.INFO)) {
logger.log(Level.INFO, "SFTP client connecting to
{0}:{1} ...", new Object[]{getConnection().getHost(),
getConnection().getPort()});
}
if (getConnection().isKeyAuth()) {
jsch.addIdentity(getConnection().getKeyPath(),
getConnection().getPassphrase());
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.connect();
if(!session.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect (user/password) to {0}:{1} ...", new
Object[]{getConnection().getHost(), getConnection().getPort()});
} else {
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.setPassword(getConnection().getPassword());
session.connect();
if(!session.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect (user/password) to {0}:{1} ...", new
Object[]{getConnection().getHost(), getConnection().getPort()});
}
this.sftp = (ChannelSftp) session.openChannel("sftp");
this.sftp.connect();
if(!sftp.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect sftp Channel ( {0}:{1} ) ...", new Object[]{getConnection().getHost(),
getConnection().getPort()});
return;
}
catch (Exception ex) {
if (logger.isLoggable(Level.WARNING)) {
logger.log(Level.WARNING, "SFTP client connection
failed.", ex);
}
throw new StorageConnectException(ex);
}
}
if (logger.isLoggable(Level.SEVERE)) {
logger.log(Level.SEVERE, "RETRYING FAILED: SFTP client
connection failed.");
}
}
}
In function disconnect sometimes appears the null pointer exception because
sftp or session is null.
I solved with this:
@Override
public void disconnect() {
if(sftp != null){
this.sftp.quit();
this.sftp.disconnect();
}
if(session != null){
this.session.disconnect();
}
}
Regards.
** Affects: syncany
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Syncany
Team, which is subscribed to Syncany.
https://bugs.launchpad.net/bugs/991771
Title:
SFTP connection bug
Status in Syncany:
New
Bug description:
Hi,
I found a bug with SFTP connection, the bug is the conection with the storage
server never closes, and creates more connections every time.
For example when upload the chunks the conection is already stablished and
for each chunk open a conection because in the SftpTransferManager in funtion
upload conects with the storage and the application not checks the connection.
@Override
public void upload(File localFile, RemoteFile remoteFile) throws
StorageException {
connect();
And the function connects every time creates a new session and not closes the
last session:
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.connect();
I solved checking the connection when try to connect with the storage.
@Override
public void connect() throws StorageConnectException {
boolean isConnected = false;
if(session != null){
if(session.isConnected()){
if(sftp != null){
if (sftp.isConnected()){
isConnected = true;
}else{
session.disconnect();
}
} else{
session.disconnect();
}
}
}
if(!isConnected){
for (int i=0; i<CONNECT_RETRY_COUNT; i++) {
try {
if (logger.isLoggable(Level.INFO)) {
logger.log(Level.INFO, "SFTP client connecting to
{0}:{1} ...", new Object[]{getConnection().getHost(),
getConnection().getPort()});
}
if (getConnection().isKeyAuth()) {
jsch.addIdentity(getConnection().getKeyPath(),
getConnection().getPassphrase());
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.connect();
if(!session.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect (user/password) to {0}:{1} ...", new
Object[]{getConnection().getHost(), getConnection().getPort()});
} else {
this.session =
jsch.getSession(getConnection().getUsername(), getConnection().getHost(),
getConnection().getPort());
Hashtable cf = new Hashtable();
cf.put("StrictHostKeyChecking", "no");
session.setConfig(cf);
session.setPassword(getConnection().getPassword());
session.connect();
if(!session.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect (user/password) to {0}:{1} ...", new
Object[]{getConnection().getHost(), getConnection().getPort()});
}
this.sftp = (ChannelSftp) session.openChannel("sftp");
this.sftp.connect();
if(!sftp.isConnected())
logger.log(Level.WARNING, "SFTP client: unable to
connect sftp Channel ( {0}:{1} ) ...", new Object[]{getConnection().getHost(),
getConnection().getPort()});
return;
}
catch (Exception ex) {
if (logger.isLoggable(Level.WARNING)) {
logger.log(Level.WARNING, "SFTP client connection
failed.", ex);
}
throw new StorageConnectException(ex);
}
}
if (logger.isLoggable(Level.SEVERE)) {
logger.log(Level.SEVERE, "RETRYING FAILED: SFTP client
connection failed.");
}
}
}
In function disconnect sometimes appears the null pointer exception because
sftp or session is null.
I solved with this:
@Override
public void disconnect() {
if(sftp != null){
this.sftp.quit();
this.sftp.disconnect();
}
if(session != null){
this.session.disconnect();
}
}
Regards.
To manage notifications about this bug go to:
https://bugs.launchpad.net/syncany/+bug/991771/+subscriptions
--
Mailing list: https://launchpad.net/~syncany-team
Post to : [email protected]
Unsubscribe : https://launchpad.net/~syncany-team
More help : https://help.launchpad.net/ListHelp