Reputation: 577
I want to delete all versions of an object with a given key using software.amazon.awssdk.s3 v2.
So far I found out there is no such deleteAllVersions(key)
, you have to get all versionIds of your object and iterate and delete each version.
The next hurdle is, there is no such listAllVersions(key)
, only a listAllVersions(prefix)
. So if I want to listAllVersions("a")
of object "a" with prefix "a" as filter, I also get all version of "aa", "ab", "ac" and so on.
It is now possible to iterate an ignore all objects not having exactly key "a". But how to handle a truncated response?
How to delete all versions of an object with a specific key, including versions marked deleted?
Upvotes: 3
Views: 2390
Reputation: 577
Use ListObjectVersionsIterable
returned by listObjectVersionsPaginator
:
//Pre-filter with prefix
ListObjectVersionsRequest listRequest = ListObjectVersionsRequest.builder().bucket(bucketName).prefix(key).build();
ListObjectVersionsIterable responses = s3Client.listObjectVersionsPaginator(listRequest);
for (ObjectVersion objectVersion : responses.versions())
{
//Filter pre-filtered result
if (objectVersion.key().equals(key))
{
DeleteObjectRequest deleteRequest = DeleteObjectRequest.builder().bucket(bucketName).key(key).versionId(versionId).build();
DeleteObjectResponse response = s3Client.deleteObject(deleteRequest);
}
}
The Paginator will handle the calls internally: https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#listObjectVersionsPaginator-software.amazon.awssdk.services.s3.model.ListObjectVersionsRequest-
Upvotes: 4