docs: remove retired schedule generation design
This commit is contained in:
+8
-10
@@ -4,7 +4,7 @@
|
||||
|
||||
本文说明模块如何协作、状态如何流转,以及失败后如何恢复。系统范围、存储归属和部署约束见 [architecture.md](architecture.md),不在这里重复。
|
||||
|
||||
阶段 A 采纳 ACM2-28 选项 C 定案:运营航班权威状态落自有 PostgreSQL(表 `FLIGHT_SCHD` 与 `SCHD_GEN`),Redis 彻底退出动态权威与全部写路径。阶段 B 的历史投影和清场暂不启用。
|
||||
阶段 A 采纳 ACM2-28 选项 C 定案:运营航班权威状态落自有 PostgreSQL(`FLIGHT_SCHD` 及资源明细表),Redis 彻底退出动态权威与全部写路径。阶段 B 的历史投影和清场暂不启用。
|
||||
|
||||
本文的流程是验收目标,当前差异见 §10。航班状态设计统一由
|
||||
[航班状态设计](flight-state.md) 维护。
|
||||
@@ -22,15 +22,13 @@
|
||||
| `PUMP_JOB` | 持久化维护作业 | 状态为 `QUEUED / RUNNING / DONE / FAILED`;不与业务消息共用排序序号。 |
|
||||
| `REQ_TRACK` | 上游请求及应答关联 | 保存请求类型、参数、出站信箱 ID、发送和完成时间;同类只允许一个开放请求。 |
|
||||
| `REF_MASTER` | 静态参考数据 | `(RTYPE, RKEY)` 唯一,`SOURCE` 记录数据来源。 |
|
||||
| `FLIGHT_SCHD` | 航班标量及单值异常、3 类文本载荷 | `FLID` 主键,`FDAY` 可空;版本和消息身份用于追踪。10 类重复集合存于 9 张明细表,见航班状态设计。 |
|
||||
| `FLIGHT_SCHD` | 航班标量及单值异常、3 类文本载荷 | `FLID` 主键;运营日、版本和消息身份用于追踪。10 类重复集合存于 9 张明细表,见航班状态设计。 |
|
||||
| `BACKFILL_TODO` | 共享信箱回填重试 | 当前失败后落账,终态与待办同事务持久化尚未完成。 |
|
||||
| `SCHD_GEN` | 日计划代版本(差删依据与版本 CAS) | `FDAY` 主键,`VERSION` 版本号,`TIMESTAMPTZ`。 |
|
||||
| `SCHD_GEN_FLID` | 当前代有效航班 FLID 集合(原 `FLIDS_JSON` 展开为行) | `(FDAY, FLID)` 主键,`FDAY` 外键级联删除。 |
|
||||
| `PROC_STATE_HST` | 终态处理记录的归档目标 | 属于目标设计,当前迁移尚未建表;不得改写为共享库历史表。 |
|
||||
|
||||
字段与索引定义以 `src/main/resources/db/migration/` 为准(含 `V1.1.0__flight_schd.sql`)。报文原文仍从共享信箱读取,因此必须协调原文保留期,不能在消息尚需处理或重放时提前清理。
|
||||
|
||||
Redis 已彻底退出动态权威与写路径;`FLIGHT_SCHD` 与 `SCHD_GEN` 在自有 PG 中由主泵单线程独占写入。
|
||||
Redis 已彻底退出动态权威与写路径;`FLIGHT_SCHD` 及资源明细表在自有 PG 中由主泵单线程独占写入。
|
||||
### 2.2 消息、身份与决策
|
||||
|
||||
`XmlCodec` 将 XML 解码为 `DecodedMessage`,包含 `SNDR / TYPE / STYP / SEQN / DTTM` 元数据和业务载荷。`MsgKind` 区分 `SCHD` 与 `FLOP` 子类型;Handler 查找与日志类型标识使用同一套映射。
|
||||
@@ -117,14 +115,14 @@ Handler 不写 Kafka 或数据库。主泵负责应用决策;各类变更在
|
||||
|
||||
### 4.1 快照发布
|
||||
|
||||
`SCHD-RESP` 和 `SCHD-DNLD` 都进入 `SnapshotFlow`:
|
||||
`SCHD-RESP` 和 `SCHD-DNLD` 都进入 `ScheduleProcessor`:
|
||||
|
||||
1. **暂存校验**:流式解析后完成整包校验和航班规范化;失败前不修改权威状态。暂存数据可在崩溃后从原文重建。
|
||||
2. **应答守卫**:`RESP` 必须匹配开放的 `RQFD` 请求;无匹配、已过期或报文时间早于发送时间时,转 `SKIPPED` 并审计,不更新快照。
|
||||
3. **SQL 原子替换**:在自有 PG 单事务内批处理写入新代 `FLIGHT_SCHD` 全量、按 `FDAY` 域内差删旧代航班,并通过 SQL CAS 推进 `SCHD_GEN` 版本。删除集为“旧代航班集合 − 新代航班集合”,仅作用于属于该代的记录,ADFT(FDAY=NULL)与已迁移航班天然存活。
|
||||
3. **SQL 原子写入**:在自有 PG 单事务内写入校验通过的 `FLIGHT_SCHD` 航班状态及资源明细;报文未携带的航班不因本次日计划报文被删除。
|
||||
4. **提交结果**:在同一 PG 事务中保存 `MSG_EVENT`、将消息置为 `SUCCEEDED`,并将匹配 `RESP` 的请求置为 `DONE`;事务提交后执行信箱回填。
|
||||
|
||||
单事务保证未提交变更整体回滚。最近一次快照重放按 `LAST_MESSAGE_ID` 识别,版本号不能单独证明消息身份;任意历史快照的重放保护仍需验收。
|
||||
单事务保证未提交变更整体回滚。消息重放由 `PROC_STATE` 的消息 ID 与业务身份控制;版本号不能单独证明消息身份。
|
||||
|
||||
### 4.2 上游请求与静态数据
|
||||
|
||||
@@ -204,7 +202,7 @@ REGISTERED → SENT → WAITING → DONE
|
||||
| 请求超时、无匹配 RESP、时间单位不一致 | 不误用迟到应答,不提前完成请求。 |
|
||||
| stub 误配置、重复实例、停机中断 | 生产拒绝不安全启动,工作线程能正确退出。 |
|
||||
|
||||
真实适配器还需 PG 事务与补偿集成测试、快照 SQL CAS 崩溃恢复测试、Kafka 故障投递验证;常规验证命令为 JDK 25 下执行 `./gradlew test`。
|
||||
真实适配器还需 PG 事务与补偿集成测试、日计划崩溃恢复测试、Kafka 故障投递验证;常规验证命令为 JDK 25 下执行 `./gradlew test`。
|
||||
|
||||
## 9. 实现入口
|
||||
|
||||
@@ -214,7 +212,7 @@ REGISTERED → SENT → WAITING → DONE
|
||||
|---|---|
|
||||
| 收报与兼容接口 | `ingress/InboxPoller.kt`、`InboxService.kt`、`InboxController.kt` |
|
||||
| 调度与处理 | `processing/Pump.kt`(含 `MessageProcessor`)、`Handler.kt`、`Identity.kt` |
|
||||
| 快照与请求 | `processing/SnapshotFlow.kt`、`reference/RequestCoordinator.kt` |
|
||||
| 日计划与请求 | `processing/ScheduleProcessor.kt`、`reference/RequestCoordinator.kt` |
|
||||
| 投递与作业 | `delivery/Dispatcher.kt`、`SchdAggregation.kt`、`jobs/JobExecutor.kt` |
|
||||
| 持久化与恢复 | `infra/persistence/`、`infra/retry/`、`jobs/BackfillSweepJob.kt` |
|
||||
| 启停与配置 | `PipelineLifecycle.kt`、`config/PipelineProps.kt` |
|
||||
|
||||
Reference in New Issue
Block a user