X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/dd18d18ffbdcf1c7e01232bce587df2169fdfca6..163c8f8750193b791eb62f5a8d73dc44a006b69e:/services/keepstore/s3_volume.go diff --git a/services/keepstore/s3_volume.go b/services/keepstore/s3_volume.go index 19c4fe540a..fb978fe2ba 100644 --- a/services/keepstore/s3_volume.go +++ b/services/keepstore/s3_volume.go @@ -403,6 +403,13 @@ func (v *S3Volume) Put(ctx context.Context, loc string, block []byte) error { return err } opts.ContentMD5 = base64.StdEncoding.EncodeToString(md5) + // In AWS regions that use V4 signatures, we need to + // provide ContentSHA256 up front. Otherwise, the S3 + // library reads the request body (from our buffer) + // into another new buffer in order to compute the + // SHA256 before sending the request -- which would + // mean consuming 128 MiB of memory for the duration + // of a 64 MiB write. opts.ContentSHA256 = fmt.Sprintf("%x", sha256.Sum256(block)) }