Skip to content

Commit 17d9bfe

Browse files
corrierilucaLucasMrqes
authored andcommitted
fix(datastore): handle not found error for S3 HeadObject
1 parent 1a614f3 commit 17d9bfe

File tree

1 file changed

+20
-9
lines changed
  • internal/datastore/storage/s3

1 file changed

+20
-9
lines changed

internal/datastore/storage/s3/s3.go

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
storage "github.com/aws/aws-sdk-go-v2/service/s3"
1212
"github.com/aws/aws-sdk-go-v2/service/s3/types"
1313
"github.com/aws/aws-sdk-go/aws"
14+
"github.com/aws/smithy-go"
1415
"github.com/padok-team/burrito/internal/burrito/config"
1516
storageerrors "github.com/padok-team/burrito/internal/datastore/storage/error"
1617
)
@@ -72,26 +73,36 @@ func (a *S3) Check(key string) ([]byte, error) {
7273

7374
result, err := a.Client.HeadObject(context.TODO(), input)
7475
if err != nil {
75-
var noKey *types.NoSuchKey
76-
if errors.As(err, &noKey) {
77-
return make([]byte, 0), &storageerrors.StorageError{
78-
Err: err,
79-
Nil: true,
76+
var apiError smithy.APIError
77+
if errors.As(err, &apiError) {
78+
switch apiError.(type) {
79+
case *types.NotFound:
80+
return make([]byte, 0), &storageerrors.StorageError{
81+
Err: err,
82+
Nil: true,
83+
}
84+
default:
85+
break
8086
}
8187
}
8288
return make([]byte, 0), err
8389
}
8490

91+
// S3 returns a checksum only if the object was uploaded with one
92+
if result.ChecksumSHA256 == nil {
93+
return make([]byte, 0), nil
94+
}
95+
8596
return []byte(*result.ChecksumSHA256), nil
8697
}
8798

8899
func (a *S3) Set(key string, data []byte, ttl int) error {
89100
input := &storage.PutObjectInput{
90-
Bucket: &a.Config.Bucket,
91-
Key: &key,
92-
Body: bytes.NewReader(data),
101+
Bucket: &a.Config.Bucket,
102+
Key: &key,
103+
Body: bytes.NewReader(data),
104+
ChecksumAlgorithm: types.ChecksumAlgorithmSha256,
93105
}
94-
95106
_, err := a.Client.PutObject(context.TODO(), input)
96107
if err != nil {
97108
return err

0 commit comments

Comments
 (0)