从快照创建共享的额外规范

https://blueprints.launchpad.net/manila/+spec/add-create-share-from-snapshot-extra-spec

本规范描述了为什么以及如何将 ‘snapshot_support’ 的过度含义分离为两个独立的标准额外规范。 此外,为了防止所需额外规范的激增,并尽可能使创建新的共享类型变得简单和灵活,我们可以使 snapshot_support 和每个新的快照相关额外规范都是可选的。

问题描述

长期以来,manila 都有 ‘snapshot_support’ 标准额外规范,该规范被过度用于表示件事

  • 驱动程序可以对共享进行快照,并且

  • 驱动程序可以从快照创建新的共享

随着更多快照语义的提出,包括共享还原和可挂载的快照,我们预计有些驱动程序可能支持新的语义,而无法从快照创建新的共享。 因此,有必要打破 ‘snapshot_support’ 的过度使用。

我们可以添加一个新的标准额外规范,create_share_from_snapshot_support,来指示后端是否可以从共享快照创建新的共享。

snapshot_support 额外规范当前是必需的,这意味着管理员无法创建一个类型,其中 snapshot_support 是“不关心”,使得该类型的共享即使在存储控制器上存在可以拍摄快照的功能,也不会提供快照功能。 通过使 snapshot_support 和其他新的快照相关额外规范可选,我们可以支持共享类型上的“不关心”语义。

用例

可以拍摄共享快照但不能从快照创建新共享的驱动程序将受益于此更改。 例如,这样的驱动程序可以报告 snapshot_support=True,create_share_from_snapshot_support=False,以及 revert_to_snapshot_support=True。

提议的变更

为了完成此更改,我们将执行以下操作

  • 在下一个可用的微版本中定义新的额外规范 create_share_from_snapshot_support。

  • 添加数据库迁移,将 create_share_from_snapshot_support 添加到包含 snapshot_support 的每个共享类型中。 由于在更改之前 snapshot_support 被过度使用,我们可以简单地将每个类型 snapshot_support 的值复制到新的 create_share_from_snapshot_support 额外规范中。

  • 添加数据库迁移,将新的 create_share_from_snapshot_support 功能添加到共享记录中,以便 manila 记录每个共享在创建时相关的快照功能。

  • 在共享创建时,将 create_share_from_snapshot_support 的值复制到每个共享。 如果 create_share_from_snapshot_support 不存在于共享类型中,则将共享上的相应值设置为 False。

  • 继续在共享创建时将 snapshot_support 的值复制到每个共享。 由于 snapshot_support 现在是可选的,如果 snapshot_support 不存在于共享类型中,则将共享上的相应值设置为 False。

  • 在从快照创建共享时,确保 create_share_from_snapshot_support 为 True。

  • 确保之前的微版本无法从共享类型中删除 snapshot_support 额外规范。

  • 确保之前的微版本继续为 snapshot_support 以及 create_share_from_snapshot_support 提供默认值 True。

备选方案

我们可以保留过度使用,但这会导致对于可以创建快照但不能从快照创建新共享的驱动程序产生混淆和不正确的行为。

我们可以继续要求 snapshot_support 和所有新的快照相关额外规范都存在于每个共享类型上,但这将阻止管理员创建具有“不关心”语义的共享类型。

数据模型影响

  • 将 create_share_from_snapshot_support 字段添加到共享表,并将 snapshot_support 的值复制到每个共享的新 create_share_from_snapshot_support 字段。

  • 将 create_share_from_snapshot_support 行添加到 share_type_extra_specs 表中,对于具有 snapshot_support 的每个类型,其值从 snapshot_support 复制而来。

REST API 影响

在该微版本中

  • snapshot_support 额外规范变得可删除,就像新的快照相关额外规范一样。

  • 不再为 snapshot_support 提供默认值。 如果未在共享类型上指定,则 snapshot_support 和 create_share_from_snapshot_support 不会从管理员上下文的共享类型 API 返回。 但是,用户会看到两个值,标称值为 False,以便他们知道该类型的共享将如何表现。

  • 在从快照创建共享之前,会检查 create_share_from_snapshot_support 的值(否则返回 HTTPBadRequest)。

驱动程序影响

create_share_from_snapshot_support 的值将根据驱动程序包含的方法进行推断,就像 snapshot_support 已经完成的那样。

安全影响

通知影响

其他最终用户影响

在此更改之前,python-manilaclient 为必需的额外规范 snapshot_support 提供了默认值。 从新的微版本开始,它将不再为 snapshot_support 提供默认值,因为该额外规范不再是必需的。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人
  • clintonk (manila & python-manilaclient)

其他贡献者
  • gouthamr (tempest & db-related tests)

工作项

代码都在一个补丁中,并且已经可用。

依赖项

测试

将为所有添加或更改的功能添加新的单元和 tempest 测试覆盖范围。

文档影响

  • API 参考:添加有关 API 的内容。

  • 用户指南:添加关于共享类型的内容。

  • 管理员指南:添加关于通用功能和不关心行为的内容。

  • 开发者参考:将 create_share_from_snapshot_support 添加到通用功能和臭名昭著的驱动程序矩阵中。

参考资料