From dd3b9910eeee2aaa3e1cb3fe4a6cd2f07ad74b63 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Wed, 30 May 2018 19:28:14 +0200 Subject: [PATCH] sftp: persist "ssh command exited" error If our ssh process has died, not only the next, but all subsequent calls to clientError() should indicate the error. restic output when the ssh process is killed with "kill -9": Save() returned error, retrying after 253.661803ms: Write: failed to send packet header: write |1: file already closed Save() returned error, retrying after 580.752212ms: ssh command exited: signal: killed Save() returned error, retrying after 790.150468ms: ssh command exited: signal: killed Save() returned error, retrying after 1.769595051s: ssh command exited: signal: killed [...] error in cleanup handler: ssh command exited: signal: killed Before this patch: Save() returned error, retrying after 252.84163ms: Write: failed to send packet header: write |1: file already closed Save() returned error, retrying after 660.236963ms: OpenFile: failed to send packet header: write |1: file already closed Save() returned error, retrying after 568.049909ms: OpenFile: failed to send packet header: write |1: file already closed Save() returned error, retrying after 2.428813824s: OpenFile: failed to send packet header: write |1: file already closed [...] error in cleanup handler: failed to send packet header: write |1: file already closed --- internal/backend/sftp/sftp.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/backend/sftp/sftp.go b/internal/backend/sftp/sftp.go index f01a26dd4..5ac60da82 100644 --- a/internal/backend/sftp/sftp.go +++ b/internal/backend/sftp/sftp.go @@ -75,7 +75,9 @@ func startClient(program string, args ...string) (*SFTP, error) { go func() { err := cmd.Wait() debug.Log("ssh command exited, err %v", err) - ch <- errors.Wrap(err, "cmd.Wait") + for { + ch <- errors.Wrap(err, "ssh command exited") + } }() // open the SFTP session