diff --git a/cmd/testworkflow-toolkit/artifacts/cloud_uploader.go b/cmd/testworkflow-toolkit/artifacts/cloud_uploader.go index 62aa587da9..11d76de5a1 100644 --- a/cmd/testworkflow-toolkit/artifacts/cloud_uploader.go +++ b/cmd/testworkflow-toolkit/artifacts/cloud_uploader.go @@ -86,6 +86,10 @@ func (d *cloudUploader) getContentType(path string, size int64) string { func (d *cloudUploader) putObject(url string, path string, file io.Reader, size int64) error { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute) defer cancel() + if size == 0 { + // http.Request won't send Content-Length: 0, if the body is non-nil + file = nil + } req, err := http.NewRequestWithContext(ctx, http.MethodPut, url, file) if err != nil { return err diff --git a/pkg/cloud/data/testworkflow/output.go b/pkg/cloud/data/testworkflow/output.go index a08be8a0ee..1ae07c6c96 100644 --- a/pkg/cloud/data/testworkflow/output.go +++ b/pkg/cloud/data/testworkflow/output.go @@ -65,7 +65,14 @@ func (r *CloudOutputRepository) SaveLog(ctx context.Context, id, workflowName st if err != nil { return err } - defer buffer.Cleanup() + bufferLen := buffer.Len() + if bufferLen == 0 { + // http.Request won't send Content-Length: 0, if the body is non-nil + buffer.Cleanup() + buffer = nil + } else { + defer buffer.Cleanup() + } url, err := r.PresignSaveLog(ctx, id, workflowName) if err != nil { return err @@ -75,7 +82,7 @@ func (r *CloudOutputRepository) SaveLog(ctx context.Context, id, workflowName st return err } req.Header.Add("Content-Type", "application/octet-stream") - req.ContentLength = int64(buffer.Len()) + req.ContentLength = int64(bufferLen) res, err := r.httpClient.Do(req) if err != nil { return errors.Wrap(err, "failed to save file in cloud storage")