Reduce memory usage for chunked artifact uploads to MinIO (#31325) (#31338)

Backport #31325 by @bohde

When using the MinIO storage driver for Actions Artifacts, we found that
the chunked artifact required significantly more memory usage to both
upload and merge than the local storage driver. This seems to be related
to hardcoding a value of `-1` for the size to the MinIO client [which
has a warning about memory usage in the respective
docs](https://pkg.go.dev/github.com/minio/minio-go/v7#Client.PutObject).
Specifying the size in both the upload and merge case reduces memory
usage of the MinIO client.

Co-authored-by: Rowan Bohde <rowan.bohde@gmail.com>
Co-authored-by: Kyle D <kdumontnu@gmail.com>
This commit is contained in:
Giteabot 2024-06-12 22:25:46 +08:00 committed by GitHub
parent 758f84f33e
commit b1ad8ccb73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -39,7 +39,7 @@ func saveUploadChunkBase(st storage.ObjectStorage, ctx *ArtifactContext,
r = io.TeeReader(r, hasher) r = io.TeeReader(r, hasher)
} }
// save chunk to storage // save chunk to storage
writtenSize, err := st.Save(storagePath, r, -1) writtenSize, err := st.Save(storagePath, r, contentSize)
if err != nil { if err != nil {
return -1, fmt.Errorf("save chunk to storage error: %v", err) return -1, fmt.Errorf("save chunk to storage error: %v", err)
} }
@ -208,7 +208,7 @@ func mergeChunksForArtifact(ctx *ArtifactContext, chunks []*chunkFileItem, st st
// save merged file // save merged file
storagePath := fmt.Sprintf("%d/%d/%d.%s", artifact.RunID%255, artifact.ID%255, time.Now().UnixNano(), extension) storagePath := fmt.Sprintf("%d/%d/%d.%s", artifact.RunID%255, artifact.ID%255, time.Now().UnixNano(), extension)
written, err := st.Save(storagePath, mergedReader, -1) written, err := st.Save(storagePath, mergedReader, artifact.FileCompressedSize)
if err != nil { if err != nil {
return fmt.Errorf("save merged file error: %v", err) return fmt.Errorf("save merged file error: %v", err)
} }