Skip to content

Commit

Permalink
Merge pull request #1335 from xEricL/main
Browse files Browse the repository at this point in the history
Add DeleteMany() to S3 Storage
  • Loading branch information
ReneWerner87 authored Apr 12, 2024
2 parents 0a5bf13 + 3a6a27d commit 5de7b1b
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
1 change: 1 addition & 0 deletions s3/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ func (s *Storage) Conn() *s3.Client
// Additional useful methods.
func (s *Storage) CreateBucket(bucket string) error
func (s *Storage) DeleteBucket(bucket string) error
func (s *Storage) DeleteMany(keys ...string) error
func (s *Storage) SetWithChecksum(key string, val []byte, checksum map[types.ChecksumAlgorithm][]byte) error
```

Expand Down
26 changes: 26 additions & 0 deletions s3/s3_methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,32 @@ func (s *Storage) DeleteBucket(bucket string) error {
return err
}

// DeleteMany entries by keys.
func (s *Storage) DeleteMany(keys ...string) error {
if len(keys) <= 0 {
return nil
}

var objects []types.ObjectIdentifier
for _, k := range keys {
objects = append(objects, types.ObjectIdentifier{
Key: aws.String(k),
})
}

ctx, cancel := s.requestContext()
defer cancel()

_, err := s.svc.DeleteObjects(ctx, &s3.DeleteObjectsInput{
Bucket: &s.bucket,
Delete: &types.Delete{
Objects: objects,
},
})

return err
}

// SetWithChecksum sets key with value and checksum.
//
// Currently 4 algorithms are supported:
Expand Down
28 changes: 28 additions & 0 deletions s3/s3_methods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,34 @@ func Test_S3_CreateDeleteBucket(t *testing.T) {
require.NoError(t, err)
}

func Test_S3_DeleteMany(t *testing.T) {
val := []byte("doe")

err := testStore.Set("john1", val, 0)
require.NoError(t, err)

err = testStore.Set("john2", val, 0)
require.NoError(t, err)

err = testStore.Set("john3", val, 0)
require.NoError(t, err)

err = testStore.DeleteMany("john1", "john2")
require.NoError(t, err)

result, err := testStore.Get("john1")
require.NoError(t, err)
require.Zero(t, len(result))

result, err = testStore.Get("john2")
require.NoError(t, err)
require.Zero(t, len(result))

result, err = testStore.Get("john3")
require.NoError(t, err)
require.Equal(t, val, result)
}

func Test_S3_SetWithChecksum(t *testing.T) {
var (
key = "set-with-checksum"
Expand Down

0 comments on commit 5de7b1b

Please sign in to comment.