From b0fc5ddc8b3a7e64ca4dd1830d12a3419eea14a9 Mon Sep 17 00:00:00 2001 From: Wayne Warren Date: Wed, 4 Nov 2020 00:05:55 -0600 Subject: [PATCH] s3: use a request handler to set ContentLength on HeadObjectOutput --- registry/storage/driver/s3-aws/s3.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/registry/storage/driver/s3-aws/s3.go b/registry/storage/driver/s3-aws/s3.go index 976c2ace8..fc7a45972 100644 --- a/registry/storage/driver/s3-aws/s3.go +++ b/registry/storage/driver/s3-aws/s3.go @@ -585,6 +585,24 @@ func (d *driver) logS3Operation(ctx context.Context) request.NamedHandler { } } +// setContentLengthHandlerHame is used to identify the handler used set the +// ContentLength field on request data output types that support it. +const setContentLengthHandlerName = "docker.storage-driver.s3.set-content-length" + +// setContentLength is used to set the ContentLength field on request data +// output types that support it. +var setContentLength = request.NamedHandler{ + Name: setContentLengthHandlerName, + Fn: func(r *request.Request) { + switch v := r.Data.(type) { + case *s3.HeadObjectOutput: + if r.HTTPResponse.ContentLength > 0 { + v.SetContentLength(r.HTTPResponse.ContentLength) + } + } + }, +} + func (d *driver) s3Client(ctx context.Context) *s3.S3 { s := d.S3 @@ -593,6 +611,7 @@ func (d *driver) s3Client(ctx context.Context) *s3.S3 { r := d.logS3Operation(ctx) s.Client.Handlers.Complete.PushBackNamed(r) } + s.Client.Handlers.Complete.PushBackNamed(setContentLength) return s }