docs: 航班状态设计重写为当前基线,按请求/下载与动态两条线讲清状态变更 (ACM2-30)

This commit is contained in:
windyboy
2026-09-08 18:50:34 +08:00
parent 1fc2b2c895
commit bb81deae0a
11 changed files with 530 additions and 369 deletions
+12 -6
View File
@@ -6,6 +6,10 @@
阶段 A 采纳 ACM2-28 选项 C 定案:运营航班权威状态落自有 PostgreSQL(表 `FLIGHT_SCHD``SCHD_GEN`),Redis 彻底退出动态权威与全部写路径。阶段 B 的历史投影和清场暂不启用。
本文的流程是验收目标,当前差异见 §10。航班存储细节统一由
[航班状态设计](flight-state-design-v2.md) 和 [字段语义](flight-state-semantics.md) 维护;
2026-09-08 的代码证据与剩余计划见 [核查报告](acm2-29-audit-and-simplification.md)。
## 2. 数据与领域模型
### 2.1 持久化记录
@@ -19,7 +23,8 @@
| `PUMP_JOB` | 持久化维护作业 | 状态为 `QUEUED / RUNNING / DONE / FAILED`;不与业务消息共用排序序号。 |
| `REQ_TRACK` | 上游请求及应答关联 | 保存请求类型、参数、出站信箱 ID、发送和完成时间;同类只允许一个开放请求。 |
| `REF_MASTER` | 静态参考数据 | `(RTYPE, RKEY)` 唯一,`SOURCE` 记录数据来源。 |
| `FLIGHT_SCHD` | 运营航班当前权威状态(SCHD 快照 + FLOP/ADFT 增量合并),一行一航班宽表 | `FLID` 主键,`FDAY` 所属日代(可空),SCHD.FLTR 标量字段列 + 1:N 明细集合序列化文本列(11g 修订,废除 `FLTR_JSON` JSONB 整文档),`TIMESTAMPTZ` 时间戳。 |
| `FLIGHT_SCHD` | 航班标量及单值异常、3 类文本载荷 | `FLID` 主键,`FDAY` 可空;版本和消息身份用于追踪。10 类重复集合存于 9 张明细表,见航班状态设计。 |
| `BACKFILL_TODO` | 共享信箱回填重试 | 当前失败后落账,终态与待办同事务持久化尚未完成。 |
| `SCHD_GEN` | 日计划代版本(差删依据与版本 CAS) | `FDAY` 主键,`VERSION` 版本号,`TIMESTAMPTZ`。 |
| `SCHD_GEN_FLID` | 当前代有效航班 FLID 集合(原 `FLIDS_JSON` 展开为行) | `(FDAY, FLID)` 主键,`FDAY` 外键级联删除。 |
| `PROC_STATE_HST` | 终态处理记录的归档目标 | 属于目标设计,当前迁移尚未建表;不得改写为共享库历史表。 |
@@ -120,7 +125,7 @@ Handler 不写 Kafka 或数据库。主泵负责应用决策;各类变更在
3. **SQL 原子替换**:在自有 PG 单事务内批处理写入新代 `FLIGHT_SCHD` 全量、按 `FDAY` 域内差删旧代航班,并通过 SQL CAS 推进 `SCHD_GEN` 版本。删除集为“旧代航班集合 − 新代航班集合”,仅作用于属于该代的记录,ADFT(FDAY=NULL)与已迁移航班天然存活。
4. **提交结果**:在同一 PG 事务中保存 `MSG_EVENT`、将消息置为 `SUCCEEDED`,并将匹配 `RESP` 的请求置为 `DONE`;事务提交后执行信箱回填。
单事务保证崩溃后整体回滚,无跨存储中间态;重放时识别版本,绝不发生二次自增
单事务保证未提交变更整体回滚。最近一次快照重放按 `LAST_MESSAGE_ID` 识别版本号不能单独证明消息身份;任意历史快照的重放保护仍需验收
### 4.2 上游请求与静态数据
@@ -212,17 +217,18 @@ REGISTERED → SENT → WAITING → DONE
| 调度与处理 | `processing/Pump.kt`(含 `MessageProcessor`)、`Handler.kt``Identity.kt` |
| 快照与请求 | `processing/SnapshotFlow.kt``reference/RequestCoordinator.kt` |
| 投递与作业 | `delivery/Dispatcher.kt``SchdAggregation.kt``jobs/JobExecutor.kt` |
| 持久化与恢复 | `infra/persistence/``infra/redis/``infra/retry/` |
| 持久化与恢复 | `infra/persistence/``infra/retry/``jobs/BackfillSweepJob.kt` |
| 启停与配置 | `PipelineLifecycle.kt``config/PipelineProps.kt` |
## 10. 当前实现差异
以下缺口直接影响上述设计是否成立,不能以类或接口已存在作为完成依据:
- **事务与外部副作用**ACM2-28 定案后,已完成 `FLIGHT_SCHD` 增量更新与快照全量写入、待发事件与 `PROC_STATE` 在自有 PG 事务原子提交,提交后异步回填信箱
- **事务与外部副作用**状态、outbox 与终态同 PG 事务已实现;提交后尝试回填,失败落 BACKFILL_TODO。提交后崩溃及待办落账再次失败仍有恢复缺口,不能认定补偿闭环
- **收报与调度**:轮询仍从 `afterId=0` 扫描,持久水位与补扫策略未完成;作业以“队头为 FAILED”近似窗口,未区分是否已到期。主泵直取系统时间,滞留判据使用更新时刻,不能保证设计要求的超时升级。
- **快照与业务能力**:快照 SQL 事务化已落地,支持 JDBC 批处理、域内差删与 SQL CAS 推进,超限 10000 熔断保护;忽略规则及所需 Handler 仍需在后续阶段铺开
- **快照与业务能力**:快照事务内核已有测试,但生产 staging parser 未接通;Handler 注册检查在 DNLD 路由之前,生产只有 GTDT Handler。RESP 匹配和其他 Handler 待完成;10000 条保护不等于整包协议校验完成
- **航班读写**:唯一写入口和明细权威读已落地;ROUT/ERUT 主键冲突、空值/未知属性保真、事件重复计算和逐航班多次查询仍需修正。`/all/flights` 尚未实现。
- **请求、静态数据与归档**:请求在真实出站前就标记发送,时间匹配与审计仍需修正;静态数据存在进程内过渡实现,归档表与关联保留策略尚未落地。
- **生产与运维**缺少完整启动校验、运行期单写者保护、影子隔离Kafka 强制配置校验;投递滞留升级、死信告警、端到端追踪与指标未闭环。影子对拍 cross-store diff 工具已就绪
- **生产与运维**已有事务行锁,但没有整个实例的排他/FIFO 协调;启动校验、影子隔离Kafka 强制配置、告警与指标未闭环。对拍比较工具存在不等于现场对拍已完成。Oracle 尚需完整适配
进度与验收项见 Plane ACM2-10 实施计划(U01–U30),业务契约与待确认事项见 [user-stories.md](user-stories.md)。本文件不维护工单流水账、测试数量或历史方案全文。