处理锁定资源的收敛工作流

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/convergence-concurrent-workflow

问题描述

在使用传统资源插件进行收敛时(收敛第一阶段的所有插件),我们可能会遇到一个被锁定以处理先前更新的资源。我们希望等待此先前的更新完成,并使用最新的模板重新触发另一个更新。

提议的变更

如果工作流遇到被另一个引擎锁定的资源,它应该首先检查另一个引擎是否仍然存活,如果不是则解除锁定。假设另一个引擎仍在工作,工作流不应处理该资源,也不应触发任何后续节点的处理。为了确保在先前的更新完成后重新触发该图节点的处理,我们必须在每次更新结束时检查我们正在处理的遍历是否仍然有效。

由于属于先前遍历的 SyncPoint 在开始新的遍历之前会被删除,因此在数据库中找不到 SyncPoint 就足以提醒我们可能存在正在等待的新遍历。如果发生这种情况,请重新加载堆栈以确定当前的遍历,并检查当前节点的 SyncPoint 以确定它是否已准备好。如果是,则使用 Stack 表中找到的最新遍历的适当数据重新触发当前节点。

可能存在导致对同一图节点进行多次触发的竞争条件,但它将通过资源上的锁来解决,因为只有成功获取锁的过程才会继续。

所有这些规则的一个例外是,如果图节点是更新类型,并且资源状态是 DELETE_IN_PROGRESS。在这种情况下,我们应该简单地创建一个替换资源。

备选方案

实现

负责人

主要负责人

ananta

里程碑

完成目标里程碑

Kilo-3

工作项

  • 遇到锁定资源时退出

  • 如果找不到 SyncPoint,则在需要时重新触发

  • 替换仍然需要但状态为 DELETE_IN_PROGRESS 的资源

  • 创建开发者文档

依赖项