diff --git a/s3/README.md b/s3/README.md index 7fa708f0e..15890a195 100644 --- a/s3/README.md +++ b/s3/README.md @@ -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 ``` diff --git a/s3/s3_methods.go b/s3/s3_methods.go index d99a453b5..fe0d4dc0f 100644 --- a/s3/s3_methods.go +++ b/s3/s3_methods.go @@ -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: diff --git a/s3/s3_methods_test.go b/s3/s3_methods_test.go index afd665fcb..a888eeca0 100644 --- a/s3/s3_methods_test.go +++ b/s3/s3_methods_test.go @@ -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"