Worker 失联恢复:租约过期→UNKNOWN→显式对账→接管续跑

Worker 失联恢复:租约过期→UNKNOWN→显式对账→接管续跑 由 Archify 生成的时序图。 claimExecution(execId, workerA, leaseMs) ① 校验 READY→RUNNING 写 LeaseRecord+fencingToken=n heartbeat(leaseId, token) 续约 —— 随后失联 ② 租约过期→markExecutionUnknownIfLeaseLost execution→UNKNOWN(副作用待对账) 现状=UNKNOWN,等待对账 reconcileExecution(execId, READY, reason) ③ mayReconcile 校验→execution.requeued 事件 execution→READY(显式对账,非自动) claimExecution(execId, workerB, leaseMs) 新租约+fencing=n+1,续跑下一切片 ① 认领与心跳 ② 失联 → UNKNOWN ③ 显式对账 → 接管续跑 Worker A · 首个租约持有者 · 时序参与者 Worker A 首个租约持有者 AgentHarness · 持久化外循环 · 时序参与者 AgentHarness 持久化外循环 命令网关 · Gateway·唯一写面 · 时序参与者 命令网关 Gateway·唯一写面 HarnessStore · File/JDBC · 时序参与者 HarnessStore File/JDBC 宿主/对账方 · reconcileExecution · 时序参与者 宿主/对账方 reconcileExecution Worker B · 接管者 · 时序参与者 Worker B 接管者 图例 请求 安全 异步追踪 默认消息

UNKNOWN ≠ FAILED

  • • 租约丢失时副作用/持久化结果不可判定:标 UNKNOWN 挂起,等 reconcileExecution 显式对账
  • • 持久化校验 fencingToken:失联 worker 的迟到写入被拒,不覆盖接管者的新状态

接管语义

  • • reconcileExecution 受 mayReconcile 闸门约束并落 execution.requeued 事件;READY 后任一 worker 可 claim
  • • 同 worker 幂等续约;他 worker 在租约未过期时 claim → HarnessConflictException;过期后 fencing 递增