1

即使在直接从文件系统中删除容器和对象之后,Swift 也会在对其执行 GET 命令时列出容器。但是,如果我们尝试使用 DELETE 命令删除容器,则会返回 404: Not Found 错误消息。请解释是否有问题或是否有某种缓存?

4

1 回答 1

1

我认为问题来自直接从文件系统中删除容器和/或对象。

Swift 处理对象和容器写入请求的方法必须非常小心,以确保所有分布式索引信息最终保持一致。直接修改文件系统是不够的。听起来容器数据库在他们有机会更新帐户数据库列表之前就被删除了——可能是在所有对象索引信息被删除之前手动取消链接?

通常在删除请求之后,容器必须作为“墓碑”停留一段时间,以确保帐户数据库得到正确更新。

作为一种解决方法,您可以重新创建它们(使用 POST),然后重新发出 DELETE;这应该成功地允许删除新的容器并直接更新帐户数据库列表。

(注意:容器数据库本身虽然是空的,但在 reclaim_age 过去之前仍将作为墓碑存在于磁盘上)

于 2013-06-10T17:33:28.443 回答