加载并生成堆栈遍历的依赖图

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/convergence-prepare-traversal

问题描述

我们需要预先计算堆栈中所有现有资源之间的依赖关系图,包括现在已过时的资源版本。

提议的变更

在将转换应用于堆栈时,从数据库加载该堆栈的所有现有资源。如果模板中一个或多个资源的某个版本已经存在,则选择最新版本进行更新,前提是它处于有效状态。如果数据库中不存在模板中资源的任何版本,则为其创建一个。

计算依赖关系图,以便我们按依赖顺序访问所有选定的资源以更新它们(如果需要),并按相反的依赖顺序访问所有资源以清理它们(如果需要)。对资源的清理操作必须始终在同一资源上的任何更新操作之后发生。

最后,用一个新的 UUID 替换遍历 ID,并为图中每个节点创建一个 SyncPoint,并使用此遍历 ID。它还应该为堆栈本身创建一个 SyncPoint,这将用于指示遍历的更新部分何时完成,此时可以更新堆栈状态。

此代码应在很大程度上遵循 https://github.com/zaneb/heat-convergence-prototype/blob/resumable/converge/stack.py 中的原型。

如果两个更新正在竞争,其中一个将无法原子地使用自己新生成的遍历 ID 更新 Stack 行。在这种情况下,它应该通过删除其添加的任何新创建的 Resource 行以及所有 SyncPoint 来回滚数据库更改。

备选方案

实现

负责人

主要负责人

rh-s

里程碑

完成目标里程碑

Kilo-3

工作项

  • 从堆栈加载所有资源

  • 确定哪些资源是最新的

  • 创建所需的资源

  • 生成用于遍历的图

  • 为图中的每个节点创建 SyncPoint

  • 如果我们在成为下一个更新的竞赛中失败,则回滚数据库中所做的任何更改

  • 创建开发者文档

依赖项