From c350cd1f06fe4d25d25c9cb0ae282aa5cb304475 Mon Sep 17 00:00:00 2001 From: Maisem Ali Date: Tue, 21 Mar 2023 18:21:49 -0700 Subject: [PATCH] ssh/tailssh: use background context for uploading recordings Otherwise we see errors like ``` ssh-session(sess-20230322T005655-5562985593): recording: error sending recording to :80: Post "http://:80/record": context canceled ``` The ss.ctx is closed when the session closes, but we don't want to break the upload at that time. Instead we want to wait for the session to close the writer when it finishes, which it is already doing. Updates tailscale/corp#9967 Signed-off-by: Maisem Ali --- ssh/tailssh/tailssh.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ssh/tailssh/tailssh.go b/ssh/tailssh/tailssh.go index b586a2e1d..a22e38349 100644 --- a/ssh/tailssh/tailssh.go +++ b/ssh/tailssh/tailssh.go @@ -1343,7 +1343,12 @@ func (ss *sshSession) startNewRecording() (_ *recording, err error) { } pr, pw := io.Pipe() - req, err := http.NewRequestWithContext(ss.ctx, "POST", fmt.Sprintf("http://%s:%d/record", recorder.Addr(), recorder.Port()), pr) + + // We want to use a background context for uploading and not ss.ctx. + // ss.ctx is closed when the session closes, but we don't want to break the upload at that time. + // Instead we want to wait for the session to close the writer when it finishes. + ctx := context.Background() + req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("http://%s:%d/record", recorder.Addr(), recorder.Port()), pr) if err != nil { pr.Close() pw.Close()