辅助快照改进

https://blueprints.launchpad.net/cinder/+spec/assisted-snapshot-improvements

本规范旨在改进 Cinder 和 Nova 之间用于卷快照协调的基础设施。

问题描述

update_snapshot_status API 用于更新 Cinder 数据库中的字段,执行快照删除的驱动程序使用这些字段来确定 Nova 的部分何时完成,以及 Cinder 驱动程序可以再次接管。

目前,这会重载快照的 ‘progress’ 字段,以在 API 层和驱动程序之间传递信息。这种方法不太规范,随着越来越多的驱动程序对支持辅助快照感兴趣,应该进行重构。

这项工作也将有助于支持快照创建/删除过程的不同阶段之间的正确转换。

用例

不适用。由于这是一个仅限内部的更改,因此对用户/部署者没有影响。

提议的变更

API<->卷服务交互

建立一个 snapshot_admin_metadata 表,类似于 volume_admin_metadata 表

id : Integer, primary key,
key : string,
value : string,
volume_id : id ref volumes.id,
volume : relationship joining to volumes table

设置 snapshot_status 元数据值将允许 API 层将此信息传输到卷服务。

卷管理器<->驱动程序交互

将辅助快照处理代码从驱动程序(当前基于 RemoteFS)中分离出来,并放入卷管理器中。这将允许支持辅助快照的驱动程序为每个阶段提供一个调用,而不仅仅是单个 delete_snapshot 调用。

驱动程序将具有一个属性,指示它是否支持辅助快照,这将触发使用管理器中的以下方法,而不是管理器调用驱动程序的 create_snapshot

create_snapshot_assisted_begin(snapshot_ref)
create_snapshot_assisted_complete(snapshot_ref)

delete_snapshot_assisted_begin(snapshot_ref)
delete_snapshot_assisted_complete(snapshot_ref)

这些调用中的每一个都可以返回一个字典,其中包含要由卷管理器更新的快照和/或 snapshot_admin_metadata 的字段。

这将把当前在驱动程序中执行的一些数据库访问移动到卷管理器,并更好地支持在 Nova 和 Cinder 阶段之间定义的有状态转换。

备选方案

保持现状,这可能会导致辅助快照的基础设施不太健壮/可维护。

数据模型影响

创建如上所述的新 snapshot_admin_metadata 表。

REST API 影响

update_snapshot_status() API 将查找一个新的 ‘compute_snapshot_status’ 字段,该字段将用于填充 snapshot_admin_metadata 条目。

如果不存在此字段,它将像以前一样使用 ‘progress’ 字段以保持兼容性。

安全影响

无,进出 Cinder 的交互暴露的信息和访问级别与今天相同。

通知影响

其他最终用户影响

性能影响

其他部署者影响

Cinder 将继续与 Liberty Nova 保持向后兼容,对于此处修改的 API 而言。

开发人员影响

用于由计算服务辅助创建和删除快照的驱动程序的新接口。

实现

负责人

主要负责人

deepakcs

其他贡献者

工作项

  • 添加处理以更新 update_snapshot_status API 中的新字段

  • 在 Nova 发起的 update_snapshot_status 调用中添加新字段

  • 在快照跟踪代码中添加对新 compute_progress 字段的处理

  • 在卷管理器中创建新的驱动程序接口

  • 将 RemoteFS 快照基础设施迁移到 RemoteFSSnapDriver 类的新接口。

依赖项

测试

这将由 GlusterFS 的 CI、NFS 驱动程序(一旦在 Mitaka 中添加了快照)以及其他 RemoteFS 驱动程序的 CI 涵盖。

文档影响

参考资料