1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16
17 package s3
18
19 import (
20 "context"
21
22 "github.com/aws/aws-sdk-go/aws"
23 "github.com/aws/aws-sdk-go/service/s3"
24 "github.com/aws/aws-sdk-go/service/s3/s3manager"
25 "perkeep.org/pkg/blob"
26 )
27
28
29 const maxDeleteBatch = 1000
30
31 func (sto *s3Storage) RemoveBlobs(ctx context.Context, blobs []blob.Ref) error {
32 toDelete := make([]s3manager.BatchDeleteObject, 0, len(blobs))
33 for _, blob := range blobs {
34 toDelete = append(toDelete, s3manager.BatchDeleteObject{
35 Object: &s3.DeleteObjectInput{
36 Bucket: &sto.bucket,
37 Key: aws.String(sto.dirPrefix + blob.String()),
38 },
39 })
40 }
41
42 batchDeleter := s3manager.NewBatchDeleteWithClient(sto.client)
43 batchDeleter.BatchSize = maxDeleteBatch
44
45 return batchDeleter.Delete(ctx, &s3manager.DeleteObjectsIterator{
46 Objects: toDelete,
47 })
48 }