0

我在 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);

想法?

4

1 回答 1

0

所以我找到了解决这个问题的方法。这个想法是将版本 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);
于 2017-11-27T18:30:39.370 回答