From 8d07bbf548b99811cf4aab888223cc96c973c0a7 Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 29 Feb 2024 19:31:15 +0100 Subject: [PATCH] Also forward exec output when failing to demultiplex --- cmd/backup/exec.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cmd/backup/exec.go b/cmd/backup/exec.go index 1d762f61..754842ad 100644 --- a/cmd/backup/exec.go +++ b/cmd/backup/exec.go @@ -45,15 +45,24 @@ func (s *script) exec(containerRef string, command string, user string) ([]byte, } defer resp.Close() - var outBuf, errBuf bytes.Buffer + var outBuf, errBuf, fullRespBuf bytes.Buffer outputDone := make(chan error) + tee := io.TeeReader(resp.Reader, &fullRespBuf) + go func() { - _, err := stdcopy.StdCopy(&outBuf, &errBuf, resp.Reader) + _, err := stdcopy.StdCopy(&outBuf, &errBuf, tee) outputDone <- err }() if err := <-outputDone; err != nil { + if body, bErr := io.ReadAll(&fullRespBuf); bErr == nil { + // if possible, try to append the exec output to the error + // as it's likely to be more relevant for users than the error from + // calling stdcopy.Copy + err = errwrap.Wrap(errors.New(string(body)), err.Error()) + return nil, nil, errwrap.Wrap(err, "error demultiplexing output") + } return nil, nil, errwrap.Wrap(err, "error demultiplexing output") }