ListObjectVersions 未按预期运行(AWS SDK c++)

ListObjectVersions not behaving as expected (AWS SDK c++)

我列出了 s3 上特定密钥的所有可用版本。两个问题:

  1. 我获得的前 1000 个版本 ID 无效 "NoSuchVersion"。其余版本 ID 工作正常。
  2. 一旦我环回,IsTruncated 标志就永远不会变回 false。

问题 #2 对我来说不是什么大问题。但是#1 是一个表演终结者。

这是一个代码片段:

Model::ListObjectVersionsRequest object_request;
object_request.WithBucket(this->bucket_name);
object_request.WithKeyMarker( ... + ".json");
do {
    auto list_versions_outcome = this->s3_client->ListObjectVersions(object_request);
    //...
    //prepare for next iteration
    object_request.SetVersionIdMarker(list_versions_outcome.GetResult().GetNextVersionIdMarker());
} while (keep_looking);

想法?

所以我找到了解决此问题的方法。这个想法是将版本 ID 结果的第一页的大小限制为一个。完成后,我们可以将页面大小恢复到 1000。即使第一个结果得到错误的版本 ID,这也没有关系,因为检索最新版本是 s3 的默认行为。

代码变为:

    Model::ListObjectVersionsRequest object_request;
object_request.WithBucket(this->bucket_name);
object_request.WithKeyMarker( ... + ".json");
object_request.WithMaxKeys(1);//HAX because of the first 1000 issue
do {
    auto list_versions_outcome = this->s3_client->ListObjectVersions(object_request);
    //...
    //prepare for next iteration
    object_request.SetVersionIdMarker(list_versions_outcome.GetResult().GetNextVersionIdMarker());
    object_request.SetMaxKeys(1000); // reset the page number to 1000
} while (keep_looking);