14397: Add comment about memory implications of providing SHA256.
authorTom Clegg <tclegg@veritasgenetics.com>
Tue, 13 Nov 2018 16:43:28 +0000 (11:43 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Tue, 13 Nov 2018 16:43:28 +0000 (11:43 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

services/keepstore/s3_volume.go

index 19c4fe540a15170aad4d4e9fa2cd93645565c37d..fb978fe2ba41fbdf9895c0c718d2ca6c925d5f9c 100644 (file)
@@ -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))
        }