Cinder 重置状态改进

https://blueprints.launchpad.net/cinder/+spec/client-reset-state-improvements

改进 cinder 客户端 shell 中的“reset-state”功能。

问题描述

客户端 shell 中的 reset-state 实现存在一些需要清理的问题

我们已经并且正在为 Cinder 中的许多对象添加 <x>-reset-state 操作。这导致了大量的命令,而我们可以将这些命令整合到一个命令中。将这些整合到一个命令中更有意义,因为这旨在成为一个很少使用的管理员修复工具,而不是我们客户端的一个显著特性。

当前的 reset-state 模型也默认采用不安全行为。如果用户在没有其他参数的情况下在对象上运行它,它会将对象重置为“available”。由于我们无法确定对象是否实际上处于“available”状态,因此将它重置为“available”不是一个安全的默认路径,这会导致后续出现奇怪的问题。

用例

此功能解决了管理员需要修复 Cinder 中损坏的事物,以规避错误或失败操作的需求。

提议的变更

  • 为“cinder reset-state”添加一个新的参数,以便它可以处理我们想要重置状态的所有类型的对象。

  • 要求指定状态,而不是默认设置为“available”。

这在不破坏兼容性的情况下比较棘手,但值得这样做。默认设置在客户端完成。我们可以通过在客户端中使用微版本检查添加更严格的检查来处理这个问题,以便使用微版本 3.30+ 需要用户指定所需的状态,但使用较旧的 API 版本时,保留以前的行为。这不对应于服务器上的实际 API 更改,但应该可以作为处理兼容性的一种方式。

  • 决定不再向客户端 shell 添加 <x>-reset-state 操作。

  • (可选:) 我们应该考虑查看 attach-status 和

    migration-status 重置,因为它们需要手动指定,但可能在某些情况下,为调用者处理这些情况会更一致。

    例如,将卷重置为“available”并且不清除其附加状态是否有意义?

备选方案

  • 保持现状,并继续向客户端添加新的重置操作,这些操作默认采用危险行为。

  • 开始修复 Cinder 中需要使用 reset state 的地方。(我们应该这样做,但这是一个漫长而艰巨的项目,并且超出了本文档的范围。)

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

cinderclient CLI 的更改。

性能影响

其他部署者影响

开发人员影响

  • 我们应该设计 Cinder,使其不需要将 reset-state 作为“常规”操作。

    目前,对于某些操作,存在一种模式:
    1. 请求操作

    2. 操作失败

    3. 用户通过对象现在处于“error”状态收到操作失败的通知。

    4. 对于某些操作,现在期望管理员将状态重置回“available”以保持功能正常。

    这可以这样完成:
    1. 请求操作

    2. 操作失败

    3. 将对象放回以前的状态,而不是“error”

    4. 客户端通过我们的异步消息轮询操作状态

    5. 用户现在知道发生了什么,管理员不必执行重置。对象保留在其“真实”状态。

  • 应该考虑 reset-state 和 force-detach 的交集。

实现

负责人

主要负责人

eharney

其他贡献者

tommylikehu

工作项

依赖项

测试

cinder 客户端中的单元测试覆盖。

文档影响

Cinder shell 客户端文档需要更新。

参考资料