diff --git a/s3/s3_methods.go b/s3/s3_methods.go index d99a453b..fe0d4dc0 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 afd665fc..a888eeca 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"