Skip to content

Commit 67e01c4

Browse files
author
Nikita Sapozhnikov
committed
Method for deleting objects in batches
1 parent 2c0cd4c commit 67e01c4

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

micro-s3/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
description = 'micro-s3'
22

33
dependencies {
4+
compile ("com.aol.simplereact:cyclops-react:$cyclopsReactVersion")
45
compile 'com.amazonaws:aws-java-sdk:' + s3Version
56
compile project(':micro-core')
67

micro-s3/src/main/java/com/aol/micro/server/s3/S3Utils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
import org.springframework.stereotype.Component;
1010

1111
import com.amazonaws.services.s3.AmazonS3Client;
12+
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
13+
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
1214
import com.amazonaws.services.s3.model.ListObjectsRequest;
1315
import com.amazonaws.services.s3.model.ObjectListing;
1416
import com.amazonaws.services.s3.model.S3ObjectSummary;
17+
import com.aol.cyclops.control.ReactiveSeq;
1518

1619
@Component
1720
public class S3Utils {
@@ -35,11 +38,20 @@ public List<S3ObjectSummary> getAllSummaries(ListObjectsRequest req) {
3538
} while (listing.isTruncated());
3639
return result;
3740
}
41+
3842
/*
3943
* TODO implement smarter mechanism to reduce number of queries
4044
*/
4145
public <T> Stream<T> getSummariesStream(ListObjectsRequest req, Function<S3ObjectSummary, T> processor) {
4246
return getAllSummaries(req).stream().map(processor);
4347
}
4448

49+
public void delete(String bucketName, List<KeyVersion> objects) {
50+
ReactiveSeq.fromList(objects).grouped(1000).forEach(l -> {
51+
DeleteObjectsRequest req = new DeleteObjectsRequest(bucketName);
52+
req.setKeys(l.toList());
53+
client.deleteObjects(req);
54+
});
55+
}
56+
4557
}

micro-s3/src/test/java/com/aol/micro/server/s3/S3UtilsTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
import static org.mockito.Mockito.verify;
77
import static org.mockito.Mockito.when;
88

9+
import java.util.ArrayList;
10+
import java.util.List;
11+
912
import org.junit.Test;
1013

1114
import com.amazonaws.services.s3.AmazonS3Client;
15+
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
1216
import com.amazonaws.services.s3.model.ListObjectsRequest;
1317
import com.amazonaws.services.s3.model.ObjectListing;
1418

@@ -54,4 +58,18 @@ public void getSummariesStream() {
5458
utils.getSummariesStream(new ListObjectsRequest(), s -> s.getKey());
5559
verify(objectListing, times(2)).getObjectSummaries();
5660
}
61+
62+
@Test
63+
public void deleteObjects() {
64+
AmazonS3Client client = mock(AmazonS3Client.class);
65+
S3Utils utils = new S3Utils(client);
66+
List<KeyVersion> keys = new ArrayList<>();
67+
for (int i = 0; i < 2000; i++) {
68+
keys.add(new KeyVersion(""));
69+
}
70+
71+
utils.delete("", keys);
72+
73+
verify(client, times(2)).deleteObjects(any());
74+
}
5775
}

0 commit comments

Comments
 (0)