Skip to content

Commit

Permalink
S3 add storage class to metadata (#3369)
Browse files Browse the repository at this point in the history
Signed-off-by: nadavv169 <nadavv169@gmail.com>
  • Loading branch information
nadavv169 committed Feb 28, 2024
1 parent 6413239 commit 49afc55
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
20 changes: 16 additions & 4 deletions bindings/aws/s3/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const (
metadataEncodeBase64 = "encodeBase64"
metadataFilePath = "filePath"
metadataPresignTTL = "presignTTL"
metadataStorageClass = "storageClass"

metatadataContentType = "Content-Type"
metadataKey = "key"
Expand Down Expand Up @@ -83,6 +84,7 @@ type s3Metadata struct {
InsecureSSL bool `json:"insecureSSL,string" mapstructure:"insecureSSL"`
FilePath string `json:"filePath" mapstructure:"filePath" mdignore:"true"`
PresignTTL string `json:"presignTTL" mapstructure:"presignTTL" mdignore:"true"`
StorageClass string `json:"storageClass" mapstructure:"storageClass" mdignore:"true"`
}

type createResponse struct {
Expand Down Expand Up @@ -195,11 +197,17 @@ func (s *AWSS3) create(ctx context.Context, req *bindings.InvokeRequest) (*bindi
r = b64.NewDecoder(b64.StdEncoding, r)
}

var storageClass *string
if metadata.StorageClass != "" {
storageClass = aws.String(metadata.StorageClass)
}

resultUpload, err := s.uploader.UploadWithContext(ctx, &s3manager.UploadInput{
Bucket: ptr.Of(metadata.Bucket),
Key: ptr.Of(key),
Body: r,
ContentType: contentType,
Bucket: ptr.Of(metadata.Bucket),
Key: ptr.Of(key),
Body: r,
ContentType: contentType,
StorageClass: storageClass,
})
if err != nil {
return nil, fmt.Errorf("s3 binding error: uploading failed: %w", err)
Expand Down Expand Up @@ -436,6 +444,10 @@ func (metadata s3Metadata) mergeWithRequestMetadata(req *bindings.InvokeRequest)
merged.PresignTTL = val
}

if val, ok := req.Metadata[metadataStorageClass]; ok && val != "" {
merged.StorageClass = val
}

return merged, nil
}

Expand Down
2 changes: 2 additions & 0 deletions bindings/aws/s3/s3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
"encodeBase64": "false",
"filePath": "/usr/vader.darth",
"presignTTL": "15s",
"storageClass": "STANDARD_IA",
}

mergedMeta, err := meta.mergeWithRequestMetadata(&request)
Expand All @@ -99,6 +100,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
assert.False(t, mergedMeta.EncodeBase64)
assert.Equal(t, "/usr/vader.darth", mergedMeta.FilePath)
assert.Equal(t, "15s", mergedMeta.PresignTTL)
assert.Equal(t, "STANDARD_IA", mergedMeta.StorageClass)
})

t.Run("Has invalid merged metadata decodeBase64", func(t *testing.T) {
Expand Down

0 comments on commit 49afc55

Please sign in to comment.