【问题标题】:List objects returns files that the console shows don't exist列表对象返回控制台显示的文件不存在
【发布时间】:2018-10-29 08:34:21
【问题描述】:

ListObjects 在特定目录上返回一堆文件。大多数时候返回的文件存在,但有时它声称存在的某些文件似乎不存在。复制这些文件会返回错误:

NoSuchKey:指定的键不存在。状态码:404,请求ID:###,主机ID:###

在看到此错误一段时间后,我决定打开版本控制,果然版本历史显示,其副本导致 404 的文件在控制台中显示为已在列表和副本前 10 分钟被删除。 s3 是否可能会晚 10 分钟才注意到文件不存在?

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

    这是不寻常的,但有可能。

    Amazon S3 为所有区域的覆盖 PUTS 和 DELETES 提供最终一致性。

    ...

    • 进程删除现有对象并立即尝试读取它。在删除完全传播之前,Amazon S3 可能会返回已删除的数据。

    • 进程删除现有对象并立即列出其存储桶中的键。在删除完全传播之前,Amazon S3 可能会列出已删除的对象。

    https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

    【讨论】:

    • “一个进程删除一个现有对象并立即列出键......”听起来最接近我的情况,但我非常困惑,因为(1)这开始发生得非常突然和(2)文件它显示的内容在 10 分钟前被删除,这似乎不是“立即的”。我可以要求 AWS 为我们的存储桶做些什么来防止这种情况发生吗?
    • 这不是常见问题。这也可能是一个仅限控制台的问题,对 API 的请求不会受到影响。 AWS 没有公开讨论很多“内部”,但很明显,控制台不是由 S3 呈现的,而是一个单独的服务,它使用与 SDK 相同的 API 与 S3 对话(请参阅您的存储桶日志以获得明确的证据) 并且控制台可能正在执行某种“优化”,导致列表在不应该被缓存时被缓存。
    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 2014-02-17
    • 2014-08-17
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多