使用卷传输快照¶
https://blueprints.launchpad.net/cinder/+spec/transfer-snps-with-vols
本规范旨在扩展传输功能,以便同时传输快照和卷。
问题描述¶
目前,Cinder 可以将卷传输到另一个项目的拥有者,但如果该卷在传输之前有快照,那么在传输操作之后,新的拥有者将无法成功删除该卷,因为它有快照。
用例¶
在传输带有快照的卷时,用户现在可以选择是否将这些快照与卷一起传输。默认情况下,快照会被传输,但选择此选项将允许不将快照传输到另一个项目。请注意,如果需要,远程用户可以删除这些快照。
提议的变更¶
在正常删除时,Cinder 会禁止该请求,因为该卷有快照,但不幸的是,Cinder 现在有级联删除操作,该请求将被传递到驱动程序,某些驱动程序会引发异常,因为快照仍然存在。因此,级联删除过程也应该进行更改。
在传输 API 和 CLI 中添加一个可选参数“--no-snapshots”。如果用户未指定该参数,Cinder 将默认传输卷拥有的快照。
在传输 DB 模型中添加一个新字段来记录此选项。
更新 DB 中的快照信息,例如用户 ID、项目 ID 等。
在级联删除时,检查该卷是否在其他项目中仍然有快照。
备选方案¶
另一种选择是,如果用户指定选项参数“--with-snapshots”,则 Cinder 传输快照。
为了使客户端代码更简单,可以最小化此选项。
数据模型影响¶
在传输模型中添加一个新字段“with_snapshots(boolean)”。
REST API 影响¶
Cinder API 中的新微版本。
添加一个新的 V3 API 和一个可选参数“no_snapshots”。
POST /v3/{project_id}/volume-transfers RESP BODY: {"transfer": { ... no_snapshots: [True/False], } }
安全影响¶
如果用户没有将快照与卷一起传输,可能会存在一种安全影响,即远程用户可能能够对未传输的快照采取行动。例如,通过利用 COW,远程用户可以在后端更改快照大小。
通知影响¶
将“with_snapshots”信息添加到传输通知。
其他最终用户影响¶
无
性能影响¶
如果与给定卷关联的快照很多,可能会存在数据库性能问题,因为 Cinder 需要更改这些快照的项目 ID、用户 ID 等。
其他部署者影响¶
无
开发人员影响¶
在后端实现某种形式的卷所有权跟踪的驱动程序需要进行修复,以跟踪此更改。
实现¶
负责人¶
- 主要负责人
wanghao<sxmatch1986@gmail.com>
- 其他贡献者
无
工作项¶
在 Cinder 树中实现该功能。
更新 cinderclient 以支持此功能。
添加对 API 文档的更改。
依赖项¶
无
测试¶
需要创建单元测试和 Tempest 测试来覆盖代码更改。
文档影响¶
需要更新 Cinder API 文档以反映 REST API 的更改。
应该创建卷传输驱动程序入口点上的 Devref 条目。
参考资料¶
无