定义状态机

https://blueprints.launchpad.net/blazar/+spec/state-machine

为租约、预留和事件定义状态机,并使用租约表中的状态字段,该字段目前未被使用。

问题描述

租约、预留和事件的状态无法正确描述某些实际状态,因为目前这些状态机尚未定义完善。这会导致状态不一致、无法恢复的故障等等。

实际上,目前租约没有状态。即使租约表有一个状态字段,它也没有被使用。应该使用它来正确描述租约的状态。

用例

  • 租约所有者可以在请求响应中包含的租约参数中查看租约的确切状态。

提议的变更

概述

以下是租约、预留和事件的状态机定义。

租约状态

租约状态分为两种类型:稳定状态或过渡状态。在下面的状态图中,稳定状态绘制为黑色节点,而过渡状态绘制为灰色节点。当调用 blazar 管理器的特定方法时,稳定状态会变为过渡状态。方法完成或失败后,过渡状态会变为稳定状态。

租约具有以下四种稳定状态

  • PENDING:租约已成功创建,并已准备好启动。租约将保持此状态直到启动。

  • ACTIVE:租约已启动并处于活动状态。

  • TERMINATED:租约已成功终止。

  • ERROR:租约发生无法恢复的故障。

过渡状态如下

  • CREATING:租约正在创建。

  • STARTING:租约正在启动。

  • UPDATING:租约正在更新。

  • TERMINATING:租约正在终止。

  • DELETING:租约正在删除。任何状态都可以变为此状态,因为删除是最高优先级的操作。例如,当租约在 STARTING 状态下挂起时,应该允许删除。

../../_images/lease_statuses.png

预留状态

预留具有以下四种状态。为了向后兼容,使用小写字母

  • pending:预留已成功创建,并已准备好启动。预留将保持此状态直到启动。

  • active:预留已启动并处于活动状态。

  • deleted:已成功释放预留资源。

  • error:资源发生无法恢复的故障。

../../_images/reservation_statuses.png

事件状态

事件状态不发生改变。

../../_images/event_statuses.png

状态之间的关系

下表显示了租约状态需要满足的预留和事件状态的条件。

Lease

预留

活动

CREATING

pending

start_lease: UNDONE , end_lease: UNDONE

PENDING

pending

start_lease: UNDONE , end_lease: UNDONE

STARTING

pending 或 active 或 error

start_lease: IN_PROGRESS , end_lease: UNDONE

ACTIVE(活动)

active

start_lease: DONE , end_lease: UNDONE

TERMINATING

active 或 deleted 或 error

start_lease: DONE , end_lease: IN_PROGRESS

TERMINATED

deleted

start_lease: DONE , end_lease: DONE

DELETING

任何状态

任何状态

UPDATING

任何状态

任何非 IN_PROGRESS 状态

备选方案

将资源容量充足性表示为租约状态,例如 *_DEGRADED 状态,以及预留状态,例如 *_MISSING_RESOURCES 和 *_RESOURCES_CHANGED。此解决方案的问题是它会使状态机变得复杂。相反,我们将引入布尔标志,例如 *degraded*,用于租约和预留,以表达这种资源容量充足性。有关详细信息,请参阅资源监控规范[1]。

数据模型影响

RESTAPI 影响

安全影响

通知影响

其他最终用户影响

  • 用户可以看到租约状态。

性能影响

其他部署者影响

开发者影响

实现

负责人

主要负责人

hiro-kobayashi

工作项

  • 实现 LeaseStatus、ReservationStatus 和 EventStatus 类,其中包含状态以及管理这些状态的基本方法。

  • 实现一个装饰器,用于在调用 manager 的 *-lease 方法之前/之后检查/更新租约状态。

  • 使用该装饰器装饰 *-lease 方法。

依赖项

测试

  • 测试状态转换。

文档影响

参考资料

历史记录

修订版

发布名称

描述

Queens

引入