void BucketSample::CleanAndDeleteBucket()

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;
}