实现 SyncPoint DB 表

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/convergence-graph-progress

问题描述

在更新过程中遍历依赖图时,我们需要记录我们的进度,以便在中断的情况下可以稍后恢复遍历。

提议的变更

在数据库中添加一个新的表,SyncPoint,包含以下行

  • resource_id (资源键)

  • is_update (布尔值 - True 表示更新,False 表示清理)

  • traversal_id (UUID)

  • stack_id (堆栈键)

  • input_data (JSON 数据)

前三个字段应形成复合主键。这应该允许我们根据图键(资源键 + is_update 方向)和遍历 ID 快速获取 SyncPoint(即,无需进行查询)。堆栈键与遍历 ID 一起允许我们查询与特定遍历相关的所有 SyncPoint(例如,如果遍历被取消则删除它们)。

输入数据将包含图键(当前在更新开始时资源的资源键 + is_update 方向)到资源键(如果资源被替换则可能不同)、RefID 和属性数据的映射。因此,先前更新的资源推送的输入数据将被缓存,直到当前资源准备好接收它。此数据可能以 JSON 格式序列化,并且可能非常大。

此原型是 https://github.com/zaneb/heat-convergence-prototype/blob/resumable/converge/sync_point.py

对输入数据的更新必须是原子性的,并且必须使用 http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/ 中讨论的“UPDATE … WHERE …” 形式 - 这可能意味着添加一个在每次写入时递增的额外整数字段(因为我们无法在文本字段上进行查询)。

备选方案

实现

负责人

主要负责人

rh-s

里程碑

完成目标里程碑

Kilo-3

工作项

  • 实现新的表和 DB 迁移

  • 实现用于创建和更新条目的 API

依赖项