Skip to content

Commit 07719a1

Browse files
jasdelskotambkar
andauthored
Add support for trailing checksum (#1600)
Updates the SDK adding support Amazon S3 for trailing checksums computed with the aws-chunked content-encoding format. Adds a new internal service module, `checksum` to the SDK that API models decorated with the `httpChecksum` smithy trail will use. Co-authored-by: skotambkar <[email protected]>
1 parent 4e87627 commit 07719a1

File tree

130 files changed

+11433
-785
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+11433
-785
lines changed

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Lint rules to ignore
22
LINTIGNORESINGLEFIGHT='internal/sync/singleflight/singleflight.go:.+error should be the last type'
3+
LINT_IGNORE_S3MANAGER_INPUT='feature/s3/manager/upload.go:.+struct field SSEKMSKeyId should be SSEKMSKeyID'
34

45
UNIT_TEST_TAGS=
56
BUILD_TAGS=-tags "example,codegen,integration,ec2env,perftest"
@@ -447,6 +448,7 @@ lint:
447448
@echo "go lint SDK and vendor packages"
448449
@lint=`golint ./...`; \
449450
dolint=`echo "$$lint" | grep -E -v \
451+
-e ${LINT_IGNORE_S3MANAGER_INPUT} \
450452
-e ${LINTIGNORESINGLEFIGHT}`; \
451453
echo "$$dolint"; \
452454
if [ "$$dolint" != "" ]; then exit 1; fi

codegen/sdk-codegen/aws-models/s3.2006-03-01.json

Lines changed: 1295 additions & 225 deletions
Large diffs are not rendered by default.

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsGoDependency.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public class AwsGoDependency {
4747
public static final GoDependency SERVICE_INTERNAL_ENDPOINT_DISCOVERY = awsModuleDep("service/internal/endpoint-discovery",
4848
null, Versions.SERVICE_INTERNAL_ENDPOINT_DISCOVERY, "internalEndpointDiscovery");
4949
public static final GoDependency AWS_DEFAULTS = aws("aws/defaults");
50+
public static final GoDependency SERVICE_INTERNAL_CHECKSUM = awsModuleDep("service/internal/checksum",
51+
null, Versions.SERVICE_INTERNAL_CHECKSUM, "internalChecksum");
5052

5153
public static final GoDependency REGEXP = SmithyGoDependency.stdlib("regexp");
5254

@@ -99,5 +101,6 @@ private static final class Versions {
99101
private static final String SERVICE_INTERNAL_ENDPOINT_DISCOVERY = "v0.0.0-00010101000000-000000000000";
100102
private static final String INTERNAL_ENDPOINTS_V2 = "v2.0.0-00010101000000-000000000000";
101103
private static final String AWS_PROTOCOL_EVENTSTREAM = "v0.0.0-00010101000000-000000000000";
104+
private static final String SERVICE_INTERNAL_CHECKSUM = "v0.0.0-00010101000000-000000000000";
102105
}
103106
}

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpChecksumGenerator.java

Lines changed: 482 additions & 0 deletions
Large diffs are not rendered by default.

codegen/smithy-aws-go-codegen/src/main/resources/META-INF/services/software.amazon.smithy.go.codegen.integration.GoIntegration

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
software.amazon.smithy.aws.go.codegen.AddProtocols
22
software.amazon.smithy.aws.go.codegen.ClientResolvedDefaultsMode
33
software.amazon.smithy.aws.go.codegen.AddAwsConfigFields
4+
software.amazon.smithy.aws.go.codegen.AwsHttpChecksumGenerator
45
software.amazon.smithy.aws.go.codegen.RegisterServiceMetadataMiddleware
56
software.amazon.smithy.aws.go.codegen.AwsEventStreamIntegration
67
software.amazon.smithy.aws.go.codegen.AssembleMiddlewareStack

example/service/s3/listObjects/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ replace github.com/aws/aws-sdk-go-v2/internal/ini => ../../../../internal/ini/
2525

2626
replace github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding => ../../../../service/internal/accept-encoding/
2727

28+
replace github.com/aws/aws-sdk-go-v2/service/internal/checksum => ../../../../service/internal/checksum/
29+
2830
replace github.com/aws/aws-sdk-go-v2/service/internal/presigned-url => ../../../../service/internal/presigned-url/
2931

3032
replace github.com/aws/aws-sdk-go-v2/service/internal/s3shared => ../../../../service/internal/s3shared/

example/service/s3/usingPrivateLink/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ replace github.com/aws/aws-sdk-go-v2/internal/ini => ../../../../internal/ini/
2727

2828
replace github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding => ../../../../service/internal/accept-encoding/
2929

30+
replace github.com/aws/aws-sdk-go-v2/service/internal/checksum => ../../../../service/internal/checksum/
31+
3032
replace github.com/aws/aws-sdk-go-v2/service/internal/presigned-url => ../../../../service/internal/presigned-url/
3133

3234
replace github.com/aws/aws-sdk-go-v2/service/internal/s3shared => ../../../../service/internal/s3shared/

feature/s3/manager/download.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -348,16 +348,16 @@ func (d *downloader) downloadRange(rng string) {
348348

349349
// downloadChunk downloads the chunk from s3
350350
func (d *downloader) downloadChunk(chunk dlchunk) error {
351-
in := &s3.GetObjectInput{}
352-
awsutil.Copy(in, d.in)
351+
var params s3.GetObjectInput
352+
awsutil.Copy(&params, d.in)
353353

354354
// Get the next byte range of data
355-
in.Range = aws.String(chunk.ByteRange())
355+
params.Range = aws.String(chunk.ByteRange())
356356

357357
var n int64
358358
var err error
359359
for retry := 0; retry <= d.partBodyMaxRetries; retry++ {
360-
n, err = d.tryDownloadChunk(in, &chunk)
360+
n, err = d.tryDownloadChunk(&params, &chunk)
361361
if err == nil {
362362
break
363363
}
@@ -374,23 +374,24 @@ func (d *downloader) downloadChunk(chunk dlchunk) error {
374374

375375
chunk.cur = 0
376376

377-
d.cfg.Logger.Logf(logging.Debug, "object part body download interrupted %s, err, %v, retrying attempt %d",
378-
aws.ToString(in.Key), err, retry)
377+
d.cfg.Logger.Logf(logging.Debug,
378+
"object part body download interrupted %s, err, %v, retrying attempt %d",
379+
aws.ToString(params.Key), err, retry)
379380
}
380381

381382
d.incrWritten(n)
382383

383384
return err
384385
}
385386

386-
func (d *downloader) tryDownloadChunk(in *s3.GetObjectInput, w io.Writer) (int64, error) {
387+
func (d *downloader) tryDownloadChunk(params *s3.GetObjectInput, w io.Writer) (int64, error) {
387388
cleanup := func() {}
388389
if d.cfg.BufferProvider != nil {
389390
w, cleanup = d.cfg.BufferProvider.GetReadFrom(w)
390391
}
391392
defer cleanup()
392393

393-
resp, err := d.cfg.S3.GetObject(d.ctx, in, d.cfg.ClientOptions...)
394+
resp, err := d.cfg.S3.GetObject(d.ctx, params, d.cfg.ClientOptions...)
394395
if err != nil {
395396
return 0, err
396397
}

feature/s3/manager/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ replace github.com/aws/aws-sdk-go-v2/internal/ini => ../../../internal/ini/
2828

2929
replace github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding => ../../../service/internal/accept-encoding/
3030

31+
replace github.com/aws/aws-sdk-go-v2/service/internal/checksum => ../../../service/internal/checksum/
32+
3133
replace github.com/aws/aws-sdk-go-v2/service/internal/presigned-url => ../../../service/internal/presigned-url/
3234

3335
replace github.com/aws/aws-sdk-go-v2/service/internal/s3shared => ../../../service/internal/s3shared/

feature/s3/manager/integ_shared_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
1818
"github.com/aws/aws-sdk-go-v2/feature/s3/manager/internal/integration"
1919
"github.com/aws/aws-sdk-go-v2/service/s3"
20+
s3types "github.com/aws/aws-sdk-go-v2/service/s3/types"
2021
)
2122

2223
var integConfig aws.Config
@@ -92,7 +93,11 @@ func (d dlwriter) WriteAt(p []byte, pos int64) (n int, err error) {
9293

9394
func validate(t *testing.T, key string, md5value string) {
9495
mgr := manager.NewDownloader(client)
95-
params := &s3.GetObjectInput{Bucket: bucketName, Key: &key}
96+
params := &s3.GetObjectInput{
97+
Bucket: bucketName,
98+
Key: &key,
99+
ChecksumMode: s3types.ChecksumModeEnabled,
100+
}
96101

97102
w := newDLWriter(1024 * 1024 * 20)
98103
n, err := mgr.Download(context.Background(), w, params)

0 commit comments

Comments
 (0)