启用数据库中资源的锁定

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/convergence-resource-locking

问题描述

目前我们强制在堆栈级别进行锁定,因此一次只能对一个堆栈进行一个操作。这不够精细,因为它阻止我们在等待先前操作的结果时启动新的更新。收敛的第一阶段是通过在单个资源的级别上进行锁定来消除此限制。

提议的变更

通过确保状态更改是原子的,使资源表中的行可锁定。 我们还需要存储当前持有锁定的引擎的 ID,以便我们可以使用它来检测引擎何时死亡并进行适当的清理。

我们将使用 http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/ 中讨论的“UPDATE … WHERE …” 形式来确保原子更新。

备选方案

现有的 StackLock 代码已经几乎完全按照我们的要求执行,但缺点是它使用数据库中的单独表来执行此操作。 与应用我们已经执行的写入的新语义相比,使用它会使收敛比现在更密集地访问数据库。

实现

负责人

主要负责人

ishant-tyagi

里程碑

完成目标里程碑

Kilo-3

工作项

  • 数据库迁移以添加持有锁定的引擎的 ID

  • 修改写入资源表的方式以保证原子性

依赖项