3.4 KiB
3.4 KiB
节点状态定义(业务核心)
本文档定义 SyncNode 的状态字段语义,并说明状态机如何把这些语义形式化为可执行规则。
1. 节点状态字段
binding_status
- 含义:绑定判定结果,决定节点是否允许进入 create/update。
- 取值:
UNCHECKED | NORMAL | MISSING | PEER_CREATING | WARNING | ABNORMAL | DEPENDENCY_ERROR
action
- 含义:本轮同步意图。
- 取值:
NONE | CREATE | UPDATE | DELETE - 说明:本项目当前主路径使用
NONE/CREATE/UPDATE。
status
- 含义:执行状态。
- 取值:
PENDING | IN_PROGRESS | SUCCESS | FAILED | SKIPPED | PRECONDITION_FAILED
data_id
- 含义:目标系统业务主键是否就绪。
- 关键语义:
UPDATE路径要求目标节点具备data_id,否则进入PRECONDITION_FAILED。
error
- 含义:阻断/失败原因。
- 说明:依赖错误与执行错误都在该字段记录可读原因。
2. 绑定状态业务语义
| binding_status | 业务语义 | 是否允许进入 create/update |
|---|---|---|
UNCHECKED |
尚未执行 bind 判定 | 否 |
NORMAL |
绑定链路健康,可做差异检测与同步 | 是 |
MISSING |
无绑定记录,需做依赖检查与自动绑定/创建策略 | 有条件 |
PEER_CREATING |
对侧创建进行中(等待创建提交) | 否(等待 E20 提交) |
WARNING |
风险态(如自动绑定歧义/关闭) | 否 |
ABNORMAL |
数据损坏或核心绑定异常 | 否 |
DEPENDENCY_ERROR |
依赖不可满足 | 否 |
3. create / update 语义
create
- 来源:
MISSING节点在策略允许时生成目标CREATE节点。 - 形式化:
E20/E21+spawn_target_node_state: S06。
update
- 来源:
NORMAL节点差异检测后生成目标UPDATE。 - 形式化:
E30。 - 前置失败:目标缺
data_id或依赖 ID 解析失败时进入S08,且必须action=UPDATE。
4. 执行状态语义(datasource)
SUCCESS:执行成功,必要时回填data_id。FAILED:执行失败,保留错误。IN_PROGRESS:异步任务进行中。SKIPPED:handler 决策跳过;若由 UPDATE 降级为 NONE,则进入S14。PRECONDITION_FAILED:准备阶段失败,不进入实际 API 提交。
5. 状态机形式化映射
状态机把“业务语义”变成“可执行迁移”:
- 语义输入:strategy/datasource 提供
context。 - 迁移判断:
StateMachineRuntime.dispatch(current_state, event_id, context)。 - 状态落地:
Decision.to_state对应 YAMLstates[Sxx]。 - 不变量:每次落地后执行
runtime.check_invariants()。
6. 关键一致性约束
UNCHECKED不允许带动作(INV-1_UNCHECKED_ACTION_NONE)。- 阻断态(
ABNORMAL/WARNING/DEPENDENCY_ERROR)不允许动作(INV-2_BLOCKING_NO_ACTION)。 PRECONDITION_FAILED必须action=UPDATE(INV-3_PRECOND_IMPLIES_UPDATE)。
7. 当前默认依赖语义(业务取向)
以下是当前代码默认策略,不是单纯命名差异:
- 空依赖引用允许放行(
allow_empty_dependency_ref=True)。 - 依赖节点缺失
data_id默认允许放行(allow_missing_dep_data_id=True)。
这意味着:DEPENDENCY_ERROR 的触发更偏向“依赖节点不存在或状态异常”,而不是“依赖节点尚未回填 data_id”。如果要改为严格模式,需要在 strategy 语义层切换该策略并同步文档。