Manila share 和 share snapshot 延迟删除

蓝图: https://blueprints.launchpad.net/manila/+spec/deferred-deletion

Manila 目前不支持 share 和 share snapshot 的延迟删除。此蓝图旨在添加对 share 和 share snapshot 延迟删除的支持。最终用户将使用 API 删除 share 和 share snapshot,然后 Manila 将分别执行 share 和 share snapshot 的延迟删除,从而立即释放配额。

问题描述

如果用户想要从 Manila 中删除 share 或 share snapshot,可以使用 API 删除它们。删除过程的 manila-API 部分完成得很快,而后端驱动程序需要时间。分配给 share 或 share snapshot 的配额在 share 或 share snapshot 完全删除之前不会被释放。这增加了创建新的 share 或 share snapshot 的等待时间。提供一种立即释放配额并执行延迟删除的方法将解决此问题。 自动化工作流程在创建新的 share 和/或 share snapshot 时也会遇到问题,因为它们必须等到后端驱动程序删除 share 或 share snapshot 后配额可用。

用例

  • 在删除 share/share-snapshot 是中间步骤的自动化工作流程中,必须等待 share/share-snapshot 删除完毕。延迟删除允许自动化在无需等待驱动程序的情况下继续进行。

  • 用户希望删除 share/share-snapshot 并检查可用的 share/share-snapshot 及其对应的千兆字节配额。

提议的变更

以下是需要进行的更改

  • 将引入新的状态值 ‘DELETING_IN_DRIVER’ 和 ‘DELETING_IN_DRIVER_ERROR’,以标识将在延迟删除中处理的 share 实例。

  • 添加新的配置选项 ‘deferred_deletion’,如果为 TRUE,则以延迟删除方式删除 share,如果为 FALSE,则 share 将以当前的方式删除。

  • 一旦通过 API 请求删除 share 或 share-snapshot,配额将被回收,share/share-snapshot 实例将被移动到 ‘DELETING_IN_DRIVER’ 状态。在 share/share-snapshot 处于 ‘DELETING_IN_DRIVER’ 状态时,任何删除请求都将返回错误。将在 share manager 中添加一个每 300 秒运行一次的周期性任务,该任务获取所有处于 ‘DELETING_IN_DRIVER’ 状态的 share 实例。然后,share manager 将调用后端驱动程序来删除 share/share-snapshot 实例,并在成功删除后将其移动到 ‘DELETED’ 状态。删除过程中出现任何故障,将使 share/share-snapshot 实例进入 ‘DELETING_IN_DRIVER_ERROR’ 状态。只有管理员才能列出这些 share/share-snapshot,然后在存储上删除/清理它们,这些 share/share-snapshot 将被标记为 ‘DELETED’。周期性任务还会检查 ‘DELETING_IN_DRIVER_ERROR’ 状态下的 share/share-snapshot,并在之前的尝试 30 分钟后再次尝试删除它们。

  • 后端驱动程序无需更改。

备选方案

与其添加新的状态值,我们可以立即将 share/share-snapshot 标记为 ‘DELETED’,并将这些 share/share-snapshot 移动到另一个项目。该项目将仅包含由 manila API 服务删除的 share/share-snapshot。share manager 将运行一个周期性任务来删除该项目中的 share 和 share-snapshot。在这种情况下,由于配额更早地被回收,share manager 将确保后端驱动程序必须删除 share 实例。

此方法的一个问题是,我们将在删除期间更改原始 share 的项目 ID,这可能是不希望发生的数据修改。

数据模型影响

  • share 实例表除了引入 ‘status’ 字段的两个新值外,没有其他更改。

CLI API 影响

REST API 影响

处于 ‘deleting_in_driver_error’ 状态的 share 和 share snapshot 对普通用户不可见。只有管理员才能列出/显示这些 share 和 share snapshot,因为他们可以对这种错误做出反应,例如清理它们。

驱动程序影响

安全影响

通知影响

其他最终用户影响

如果配置了,最终用户现在将看到 ‘deleting_in_driver’ 和 ‘deleting_in_driver_error’ 状态,而不是 ‘deleting’ 和 ‘deleting_error’ 状态。此外,最终用户会观察到处于 ‘deleting_in_driver’ 状态的 share 已经立即释放了其配额。

云管理员可以通过 API 列出处于新状态的 share。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

工作项

  • 实现周期性 share manager 函数来处理延迟删除。

  • 实现tempest支持。

未来工作项目

依赖项

测试

  • 单元测试

  • Tempest 测试

文档影响

  • 文档字符串

  • Devref

  • 用户指南

  • 管理员指南

  • 发布说明

参考资料