支持共享回收站

https://blueprints.launchpad.net/manila/+spec/manila-share-support-Recycle-Bin

Manila 不支持共享回收站。此 BP 是为了添加对共享回收站的支持。最终用户可以将共享软删除到回收站,并可以恢复它。

问题描述

如果用户想从 Manila 中删除共享,可以删除给定的共享。或者,如果他们只想停止 Manila 对共享的管理,可以取消管理它,共享仍然存在于共享后端。如果用户稍后想恢复共享,他们必须记录 export_location_pathhostshare_proto 等,并且最终用户没有权限管理共享。如果用户不再使用该共享,此共享数据将永久保留在后端存储中,成为垃圾数据。因此,用户需要一种临时删除并轻松恢复的方法。

用例

  • 用户希望将共享软删除到回收站。

  • 用户希望列出回收站中的共享。

  • 用户希望从回收站恢复共享。

  • 用户希望从回收站完全删除共享。

提议的变更

以下是需要进行的更改

  • 将在 shares 表中添加一列新的列 is_soft_deleted,以标识放置在回收站中的共享。

  • 将在 shares 表中添加一列新的列 scheduled_to_be_deleted_at,当达到过期时间时,回收站中的共享将自动且完全删除。不在回收站中的共享 scheduled_to_be_deleted_at 将为 None。

  • 将在 ShareInstance 模型中添加一个新的属性 is_soft_deleted。此属性将继承父共享的值。

  • 添加新的配置项 soft_deleted_share_hold_time,这意味着云管理员希望在回收站中保留共享的最大时间。默认值为 604800 秒(7 天)。

  • 将添加一个新的共享操作,用于软删除共享。一旦共享已被删除到回收站,将设置共享的 is_soft_deleted 为 True,并计算共享的 scheduled_to_be_deleted_atscheduled_to_be_deleted_at = now_time + soft_deleted_share_hold_time

  • 将向原始列出共享 API 添加一个新的请求参数 is_soft_deletedis_soft_deleted 默认值为 False,如果设置为 True,它将仅列出已软删除的共享。

  • 共享软删除后,项目配额将保持分配,并且仅在从回收站删除共享后才会释放。

  • 将在共享管理器层添加一个新的周期性任务,以检查回收站中的共享是否已达到其 scheduled_to_be_deleted_at。如果 scheduled_to_be_deleted_at 达到,周期性任务将自动删除共享。

  • 添加从回收站恢复共享的新 API。

  • 列出共享实例将过滤共享的 is_soft_deleted 是否为 False。

  • 上述 API 更改将提升一个新的微版本。

备选方案

数据模型影响

  • 将在 shares 的模型中添加两列新的列 is_soft_deletedscheduled_to_be_deleted_at

  • 将在 ShareInstance 模型中添加一个新的属性 is_soft_deleted。此属性将继承父共享的值。

REST API 影响

  • 将共享软删除到回收站

POST /v2/shares/{share_id}/action

{“soft_delete”: null}

先决条件
  • (1)共享状态必须为 available、error 或 inactive

  • (2)不能软删除已在回收站中的共享。

  • (3)不能已经有共享的快照。

  • (4)不能已经有共享的组快照。

  • (5)不能已经有共享的副本。

  • (6)不能软删除不属于您项目的共享。

如果提供的 share_id 不存在,API 将响应 404 Not Found。如果由于不满足 (1)(3)(4) 约束而无法执行操作,API 将响应 400 Bad Request。如果由于不满足 (2)(5) 约束而无法执行操作,API 将响应 409 Conflict Request。如果由于不满足 (6) 约束而无法执行操作,API 将响应 403 forbidden

  • 列出回收站中的共享

GET /v2/shares?is_soft_deleted=true

  • 列出带有详细信息的回收站中的共享

GET /v2/shares/detail?is_soft_deleted=true

  • 从回收站完全删除共享与删除不在回收站中的共享相同

DELETE /v2/shares/{share_id}

如果提供的 share_id 不存在,API 将响应 404 Not Found

  • 从回收站恢复共享

POST /v2/shares/{share_id}/restore

{‘restore’: null}

如果提供的 share_id 不存在,API 将响应 404 Not Found。如果共享不在回收站中,API 将直接返回成功。

安全影响

通知影响

无。

其他最终用户影响

Manila 客户端、CLI 将扩展以支持共享回收站。

  • 软删除共享的命令将如下所示

    manila soft-delete <share_id>
    
  • 列出回收站中共享的命令,支持的参数与 Manila 列出相同,将如下所示

    manila list --soft-deleted
    
  • 从回收站恢复共享的命令将如下所示

    manila restore <share_id>
    

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

haixin<haixin@inspur.com>

工作项

  • 更新 API。

  • 更新管理器。

  • 更新 Manila CLI 命令。

  • 更新单元和 tempest 测试。

  • 更新相关文档。

  • 更新 Manila UI。

依赖项

测试

  • 添加单元测试

  • 添加 tempest 测试

文档影响

以下 OpenStack 文档将被更新以反映此更改

  • Openstack 管理员指南

  • OpenStack 用户指南

  • OpenStack API 参考

参考资料