备份状态重置 API

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/support-reset-state-for-backup

提供一个 API 来重置卡在创建或恢复中的备份的状态。

问题描述

由于已经存在卷重置状态功能和快照重置状态功能,备份也需要重置状态功能。在创建或恢复备份时,由于数据库宕机或 RabbitMQ 宕机等原因,备份可能会卡在创建或恢复状态。目前,我们只能通过重启 cinder-backup 来解决这些问题。此蓝图旨在为管理员提供另一种通过调用备份重置状态 API 来解决这些问题的方法。

  1. 将状态从创建/恢复重置为可用

  1. 恢复 –> 可用 直接将备份状态更改为“error”,因为备份数据已经存在于存储后端。

  2. 创建 –> 可用 使用备份创建流程作为示例,说明我们可以从备份重置功能中获得的好处。备份创建流程首先备份卷和元数据,然后更新卷和备份的状态。如果数据库在将卷的状态更新为“available”后立即宕机,导致备份的状态保持为“creating”,而没有通过 API 处理的方法。

如果我们有重置状态 API 并将状态从创建重置为可用,我们首先验证备份在存储后端是否正常。如果是,我们将备份状态从创建更改为可用。如果不是,我们将抛出异常并将备份状态从创建更改为 error。

2. 将状态从创建/恢复重置为 error 直接将备份状态更改为“error”,无需重启 cinder-backup。

用例

提议的变更

将添加一个新的 API 函数和相应的 cinder 命令来重置备份的状态。

最初的提议是为管理员提供一种处理卡在创建或恢复等状态的备份项的方法。

备选方案

登录到 cinder 数据库,使用以下 update sql 语句来更改备份项。

update backups set status='some status' where id='xxx-xxx-xxx-xxx';

数据模型影响

REST API 影响

添加一个新的 REST API 来重置备份状态
  • POST /v2/{tenant_id}/backups/{id}/action

JSON 请求模式定义

'backup-reset_status': {
    'status': 'available'
}
正常的 HTTP 响应代码

202

预期的错误 HTTP 响应代码

400

安全影响

通知影响

其他最终用户影响

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

重置备份的状态可以通过以下方式执行:$ cinder backup-reset-state –state <state> <backup>

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

ling-yun

工作项

  • 实现 REST API

  • 实现 cinder 客户端函数

  • 实现 cinder 命令

依赖项

测试

文档影响

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

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

参考资料