加载并生成堆栈遍历的依赖图¶
包含您的 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
如果我们在成为下一个更新的竞赛中失败,则回滚数据库中所做的任何更改
创建开发者文档