Может ли сломанный транспорт помешать установке SFTP? - PullRequest
0 голосов
/ 12 марта 2020

Справочная информация:

Я использую net.schmizz.sshj.sftp.SFTPClient для ежедневного SFTP-доступа к многочисленным файлам - все по разным адресам. Все файлы передаются без ошибок, за исключением одного файла, который, кажется, передает и затем генерирует прерванную транспортную исключительную ситуацию после отправки файла (поэтому он был проигнорирован).

Проверка журналов выглядит следующим образом Файл - и только этот файл - каждый день вызывает исключения из-за разорванных транспортных соединений. Однако файл все еще отправляется (поскольку в журналах об этом говорится, и клиент получил файл).

Проблема:

Вчера клиент заявил, что не получил файл. Поэтому мне интересно, если проблема заканчивается, или, возможно:

Может ли сбой очистки сеанса SFTP привести к тому, что файл не будет отправлен - даже после успешного завершения PUT? Что может Я делаю, чтобы предотвратить это исключение?

Код (упрощенный):

Этот блок кода отлично работает для всех файлов, кроме вышеупомянутого файла.

try {
  sftpClient = sshClient.newSFTPClient();

  // Transfer the file(s)
  if (getPut == SFTP.ACTION_PUT) {
    sftpClient.put(srcFilename, dstFilename);
    log.info("file sent");
  }
} catch (Throwable t) {
  log.error("failure", t);
} finally {
  try {
    if (sftpClient != null) { sftpClient.close(); }
  } catch (Throwable t) {
    log.error("could not clean up SFTP session", t);
  }
}

Журналы:

Журналы показывают, что файл был отправлен и что sftpClient.put(srcFilename, dstFilename); выполнено:

2020-03-04 17:38:36,398 [main] INFO  com.myPackage.SFTP - file sent
2020-03-02 17:42:04,690 [main] ERROR com.myPackage.SFTP - Could not clean up SFTP session
net.schmizz.sshj.connection.ConnectionException: Broken transport; encountered EOF
    at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:32)
    at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:26)
    at net.schmizz.concurrent.Promise.deliverError(Promise.java:95)
    at net.schmizz.concurrent.Event.deliverError(Event.java:74)
    at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
    at net.schmizz.sshj.connection.channel.AbstractChannel.notifyError(AbstractChannel.java:238)
    at net.schmizz.sshj.connection.channel.direct.SessionChannel.notifyError(SessionChannel.java:229)
    at net.schmizz.sshj.common.ErrorNotifiable$Util.alertAll(ErrorNotifiable.java:35)
    at net.schmizz.sshj.connection.ConnectionImpl.notifyError(ConnectionImpl.java:258)
    at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:601)
    at net.schmizz.sshj.transport.Reader.run(Reader.java:65)
Caused by: net.schmizz.sshj.transport.TransportException: Broken transport; encountered EOF
    at net.schmizz.sshj.transport.Reader.run(Reader.java:57)
...