ADR-0003: 使用 soft-fenced LakeFS 发布协议#
日期: 2026-05-21 Status: accepted Deciders: Perago maintainers
后续补充:read-only workspace task 和 no-op completion 的规则见 ADR-0004。
背景#
Perago workspace task 在 Conductor retry 语义下发布 LakeFS workspace 更新。一次 task attempt 可能已经更新 LakeFS,但没有成功向 Conductor 回报 COMPLETED。这种情况下,Conductor 仍然是 task 成功事实来源;LakeFS 上那次更新是 abandoned publication。
旧设计把 retry publication 判断放进 LakeFS 元数据。这个协议对 Python、TS 和人工节点共享实现来说过重。
决策#
Perago 使用 LakeFS 发布协议。
协议不需要任何 commit metadata。发布权限来自:
Conductor attempt fence;
target branch HEAD 状态。
如果 target HEAD == input_ref,runtime merge staging branch。如果 parent(HEAD) == input_ref,runtime 把 HEAD 当作 abandoned publication,并 hard-reset / relocate target branch 到当前 staged commit。其他 HEAD 状态 fail closed。
staging branch 在 task publish 路径中尽力删除。Perago 不直接删除 abandoned target commit;workflow-end 或运维侧可以按 LakeFS retention / GC 策略清理不再可达的物理对象。
影响#
协议足够小,可以给 Python worker、TS 节点和人工节点工具共同遵守。
Perago 不再使用 LakeFS commit metadata 做 retry 判断或恢复。commit message 仍可写人类可读标识用于排查。
该模型仍然是 operational soft fence。它依赖串行 workspace 写入、同一 repository / branch 只有一个活跃 workflow instance,以及短 LakeFS publish 窗口。它不证明 exactly-once publication。