跳转到: 导航, 搜索

Swift for File Systems w/o Extended Attributes

总结

目前,Swift 假定底层的文件系统支持扩展属性。 这限制了 Swift 与不支持扩展属性的文件系统的使用。

发布日期

Havana 之后

原理

如果我们能够克服不支持扩展属性的文件系统的限制,这将增加用户选择文件系统的灵活性,从而提高 Swift 和 Openstack 的采用率。

用户故事

用户希望在 EXT2 文件系统上部署 Openstack swift。

设计

扩展属性的替代方案

Swift 在文件系统中为每个 Swift 对象创建一个文件。 每个文件都有一组与之关联的扩展属性。 为了消除对扩展属性的依赖,建议为 Swift 创建的每个目录创建一个影子文件。 影子文件将以键值形式包含给定目录中所有文件的所有扩展属性。

当 Swift 在各个节点上移动数据时,会使用 rsync。 Swift 对目录而不是文件发出 rsync 命令。 因此,连同 Swift 文件,影子文件也会被移动,从而确保数据的一致性。

将扩展属性写入文件

将使用 pickle 包来操作属性值对(扩展属性)。

实现

代码变更

server.py 中的 read_metadata 和 write_metadata 函数

这些是需要更改的关键函数,用于调用系统调用以获取和设置扩展属性,或者根据配置调用 pickle。 如果在启动时已知底层文件系统支持扩展属性,Swift 将使用标准的系统调用。 否则,所有获取和设置扩展属性的调用都转换为从影子文件读取和写入。

其他变更

无论何时对 read_metadata 和 write_metadata 进行调用,都需要检查以传递正确的文件句柄。 如果支持扩展属性,则文件句柄使用目标文件,否则需要传递指向影子文件的文件句柄。

测试计划

启用此功能后,标准的 Swift 测试应该通过。 Swift 应该通过在支持扩展属性的文件系统以及不支持扩展属性的文件系统上的测试。 在给定时间,底层的全部文件系统应该要么支持扩展属性,要么不支持扩展属性。

演示计划

演示将上传到 Calsoft 网站 (www.calsoftinc.com)