备份强制删除 API

https://blueprints.launchpad.net/cinder/+spec/support-force-delete-backup

提供一个 API 来强制删除处于创建或恢复等状态的备份。

问题描述

目前存在卷强制删除和快照强制删除功能,但备份没有强制删除功能。当备份创建失败并且备份状态停留在“创建中”时,备份的强制删除将是有益的。当数据库在备份卷和元数据之后崩溃并更新卷的状态为“可用”时,就会发生这种情况,从而使备份的状态停留在“创建中”,而没有通过 API 处理的方法,因为备份删除 API 只能删除状态为“可用”和“错误”的备份项。

用例

如果备份已成功创建在对象存储中,但由于数据库崩溃而卡在更新备份状态中。那么使用强制删除 API,我们可以直接删除备份项(包括存储后端和数据库条目中的所有内容),而无需手动将备份的状态更改为数据库中的“错误”或重新启动 cinder-backup 并调用备份删除函数,这对于管理员来说非常有用。

提议的变更

将添加一个新的 API 函数和相应的 cinder 命令来强制删除备份。

该提案是为管理员提供一种快速删除状态不是“可用”或“错误”的备份项的方法。

  • 这是一个仅限管理员的操作。

备选方案

首先,登录到 cinder 数据库,使用以下更新 sql 将备份项状态更改为“可用”或“错误”。

update backups set status=’available’(或 ‘error’) where id=’xxx-xxx-xxx-xxx’;

其次,调用备份删除 API 来删除备份项。

数据模型影响

REST API 影响

在 v2 中添加一个新的 REST API 来删除备份

POST /v2/{tenant_id}/backups/{id}/action
{
    "os-force_delete": {}
}
正常的 HTTP 响应代码

202

预期的错误 HTTP 响应代码

404

安全影响

通知影响

删除通知应包括是否使用了强制删除

其他最终用户影响

python-cinderclient 将添加一个新的命令,backup-force-delete。此命令镜像底层的 API 函数。

可以通过以下方式强制删除备份项:$ cinder backup-force-delete <backup>

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

ling-yun

工作项

  • 实现 REST API

  • 实现 cinder 客户端函数

  • 实现 cinder 命令

依赖项

测试

需要使用正在进行的备份测试强制删除,并确保其成功删除并正确清理。

文档影响

需要更新 cinder 客户端文档以反映新的命令。

https://docs.openstack.org/admin-guide/blockstorage-manage-volumes.html

Cinder API 文档需要更新以反映 REST API 的更改。

参考资料