【问题标题】:ListObjectVersions not behaving as expected (AWS SDK c++)ListObjectVersions 未按预期运行(AWS SDK c++)
【发布时间】:2017-11-22 22:27:55
【问题描述】:

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

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

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

这是一个代码sn-p:

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

想法?

【问题讨论】:

  • 我不明白 object_request.WithKeyMarker( ... + ".json"); 另外,您不需要同时设置 versionid 和 next 键标记以正确迭代吗?我认为您假设 ListObjectVersions 始终返回您要求的确切密钥的版本,而这可能不是正在发生的事情——检查每个元素的密钥,而不仅仅是 versionid。告诉我们您的发现。
  • 嗨迈克尔,感谢您的评论。 .WithKeyMarker(... + ".json") 行是指定我希望列出所有版本的密钥。我正在尝试列出该存储桶中仅一个密钥的所有版本。由于那个键没有改变,我不需要每次迭代都重新设置它。
  • 你做了一些假设,并没有完全按照预期使用它。您需要查看响应的每个元素为您提供的键,因为它可能不是您所期望的。如果要列出一个特定键的版本,请将其设置为前缀,而不是第一个请求的键标记。然后在每个后续请求上设置密钥和版本标记,即使看起来没有必要。标记用于继续。它们可以在第一个请求中使用,但结果可能与您的期望不符。您还应该将分隔符设置为 / 以避免歧义。

标签: amazon-web-services amazon-s3 aws-sdk-cpp


【解决方案1】:

所以我找到了解决此问题的方法。这个想法是将版本 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多