in sample/src/bucket/BucketSample.cc [483:547]
void BucketSample::CleanAndDeleteBucket(const std::string &bucket)
{
if (!client->DoesBucketExist(bucket))
return;
//versioning
auto infoOutcome = client->GetBucketInfo(bucket);
if (infoOutcome.isSuccess() && infoOutcome.result().VersioningStatus() != VersioningStatus::NotSet) {
//list objects by ListObjectVersions and delete object with versionId
ListObjectVersionsRequest request(bucket);
bool IsTruncated = false;
do {
auto outcome = client->ListObjectVersions(request);
if (outcome.isSuccess()) {
for (auto const &marker : outcome.result().DeleteMarkerSummarys()) {
client->DeleteObject(DeleteObjectRequest(bucket, marker.Key(), marker.VersionId()));
}
for (auto const &obj : outcome.result().ObjectVersionSummarys()) {
client->DeleteObject(DeleteObjectRequest(bucket, obj.Key(), obj.VersionId()));
}
}
else {
break;
}
request.setKeyMarker(outcome.result().NextKeyMarker());
request.setVersionIdMarker(outcome.result().NextVersionIdMarker());
IsTruncated = outcome.result().IsTruncated();
} while (IsTruncated);
}
//abort in progress multipart uploading
auto listOutcome = client->ListMultipartUploads(ListMultipartUploadsRequest(bucket));
if (listOutcome.isSuccess()) {
for (auto const &upload : listOutcome.result().MultipartUploadList())
{
client->AbortMultipartUpload(AbortMultipartUploadRequest(bucket, upload.Key, upload.UploadId));
}
}
//List And Delete Object
ListObjectsRequest request(bucket);
bool IsTruncated = false;
do {
auto outcome = client->ListObjects(request);
if (outcome.isSuccess()) {
for (auto const &obj : outcome.result().ObjectSummarys()) {
auto dOutcome = client->DeleteObject(DeleteObjectRequest(bucket, obj.Key()));
std::cout << __FUNCTION__ << "Delete Object:" << obj.Key() <<
", result:" << dOutcome.isSuccess() << std::endl;
}
}
else {
PrintError(__FUNCTION__, outcome.error());
break;
}
request.setMarker(outcome.result().NextMarker());
IsTruncated = outcome.result().IsTruncated();
} while (IsTruncated);
// Delete the bucket.
client->DeleteBucket(DeleteBucketRequest(bucket));
std::cout << __FUNCTION__ << " done" << std::endl;
}