使用卷传输快照

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 条目。

参考资料