feat(processing): 实现自有 PostgreSQL 运营航班权威存储与单事务闭环 (ACM2-28)
- FS1: 增加 Flyway 迁移 V1.1.0__flight_schd.sql,创建 FLIGHT_SCHD 与 SCHD_GEN - FS2: 实现 FlightSchdRepository 接口及 JdbcFlightSchdRepository 与 StubFlightSchd,增强 JdbcOps 事务管理 - FS3: 扩展 MessageProcessor 事务 2 与按 FLID 点查视图,合并变更、事件与终态入单事务提交 - FS4: SnapshotFlow SQL 化(批处理 upsert、域内差删、SQL CAS 推进与熔断保护),JobExecutor 接入 PG 清场删除 - FS5: 彻底退役 Redis 权威与写路径,移除 FlightRedisClient、Lua 脚本、健康指示器与配置残留 - FS6: 补齐 U09/U29 不变量门禁(崩溃幂等、CAS 防并发、ADFT 存活保障、非 UTC JVM/会话时区无漂移)与 FlywayMigrationTest - FS7: 交付影子对拍比较内核 FlightStoreDiffTool 与单元测试 - FS8: 全面回改 decision-flight-state、architecture、design、user-stories 权威文档与规范
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
# 决策提案:运营航班表 FLIGHT_STATE 是否落自有 PostgreSQL
|
||||
# 决策:运营航班表 FLIGHT_SCHD 落自有 PostgreSQL 作阶段 A 权威(已定案 · 采纳选项 C)
|
||||
|
||||
> **状态**:提案(讨论 issue:**ACM2-28**,关联 ACM2-12)。
|
||||
> 本文重估 ACM2-12「阶段 B 缓做、不落表」的口径;定案前不改代码与迁移。
|
||||
> 交叉引用:[architecture.md](architecture.md) §6/§7、[design.md](design.md) §2/§3.4、
|
||||
> ACM2-12(存储边界)、ACM2-10 U05/U09/U15。
|
||||
> **状态**:已定案(讨论 issue:**ACM2-28**,采纳选项 C;关联修订 ACM2-12)。
|
||||
> 本文正式确立选项 C 为最终方案:运营航班权威 `FLIGHT_SCHD` 与代版本 `SCHD_GEN` 提前至阶段 A 落自有 PostgreSQL;Redis 彻底退出动态权威与写路径。
|
||||
> 交叉引用:[architecture.md](architecture.md)、[design.md](design.md)、[user-stories.md](user-stories.md)、ACM2-10(FS1–FS8 实施批次)。
|
||||
|
||||
## 1. 问题
|
||||
|
||||
@@ -75,22 +74,24 @@
|
||||
时机(F5)与代价重合。若评审认为生产 Redis 必然配强持久化+副本且接受 DNLD 重建窗口,
|
||||
A 是最小代价回退位;B 不建议。
|
||||
|
||||
## 6. 定案前置问题(→ Plane issue 讨论)
|
||||
## 6. 定案结论(ACM2-28 决策记录)
|
||||
|
||||
1. 生产 Redis/Valkey 拓扑定案:AOF 策略、副本、RPO 承诺——决定选项 A 是否可接受。
|
||||
2. FLIGHT_STATE 形态:FLID 主键 + FLTR JSONB 全量(建议起步),还是归一化列
|
||||
(`abdg`/`PSDT` 等派生字段是否有 SQL 查询面需求)。
|
||||
3. gen/SCHD_GEN 回 PG 后,U09「Redis Lua 协议重设计」是否直接取消,改为 SQL 版本 CAS
|
||||
+ Testcontainers 集成测试。
|
||||
4. 阶段 A 是否彻底移除 Redis 依赖:orms_stand 缓存去留、US-12 读取面、
|
||||
`redis-flight-store` 健康指示器调整。
|
||||
5. I2/I5 不变量重述文案与 U29 清单、architecture/design/user-stories 三文档的回改范围。
|
||||
6. 影子对拍跨存储 diff(nextgen PG vs legacy Redis)的验收口径与工具。
|
||||
| # | 问题 | 定案结论 |
|
||||
|---|---|---|
|
||||
| Q1 | 生产 Redis 拓扑 / RPO | **不再阻塞**。Redis 退出权威与写路径,不构成状态安全边界。 |
|
||||
| Q2 | 表形态 | 表名定案 `FLIGHT_SCHD`。FLID 主键 + FLTR JSONB 全量 + FDAY 所属代列(可空)。派生字段后置。 |
|
||||
| Q3 | U09 重定义 | 「Redis Lua 协议重设计」**取消**,改为「`SCHD_GEN` SQL 版本 CAS + Testcontainers PG 集成测试」。 |
|
||||
| Q4 | Redis 去留 | 阶段 A 动态写路径归零;orms_stand 缓存不保留;US-12 读 PG;`redis-flight-store` 健康指示器移除。 |
|
||||
| Q5 | 不变量重述 | I2(变更+事件+SUCCEEDED 单事务提交);I4(覆盖+差删+版本推进单事务);I5(单写者主泵线程,PG advisory lock 保护)。 |
|
||||
| Q6 | 影子对拍口径 | nextgen PG `FLIGHT_SCHD` vs legacy Redis `flightInfo` 跨存储 AST 递归比对(FS7 工具)。 |
|
||||
|
||||
## 7. 定案后的落地清单(C 方案)
|
||||
## 7. 落地完成清单(FS1–FS8 全部交付)
|
||||
|
||||
- 迁移 `V1.1.0__flight_state.sql`:FLIGHT_STATE + gen 列回归(含索引 FLID/日期)。
|
||||
- `FlightStateRepository` 重设计(FLID upsert / day replace / findByFlid)+ JDBC 实装。
|
||||
- `MessageProcessor`/`SnapshotFlow`:redisApply → PG 事务内;Lua 差删 → SQL。
|
||||
- Handler 视图与 US-12 读 PG;健康指示器、影子隔离(Redis key 前缀条目作废)同步。
|
||||
- 文档回改:本文转「已定案」,ACM2-12 阶段 A 口径修订说明。
|
||||
- **FS1** 迁移 `V1.1.0__flight_schd.sql`:创建 `FLIGHT_SCHD` 与 `SCHD_GEN`(TIMESTAMPTZ 规范)。
|
||||
- **FS2** `FlightSchdRepository` 接口与实装:快照批量写入、增量更新(ON CONFLICT 保留 FDAY)、域化差删、点查、`SCHD_GEN` SQL CAS、历史清场 `deleteByFlids`。
|
||||
- **FS3** `MessageProcessor` 事务 2 扩展:变更写入 + 事件写入 + `SUCCEEDED` 在单 PG 事务原子提交;Handler 视图按 FLID 点查。
|
||||
- **FS4** `SnapshotFlow` SQL 化:单事务内批处理 upsert + 域内差删 + SQL CAS 推进 + 事件入队 + 终态标记;`JobExecutor` 清场删除闭环。
|
||||
- **FS5** Redis 退役收口:删除 `FlightRedisClient`、Lua 脚本、`FlightRedisHealthIndicator`、`REDIS_FLIGHT_INFO` 投影与相关配置。
|
||||
- **FS6** U29/U09 不变量测试门禁:崩溃幂等无自增、CAS 防并发、ADFT 存活保障、UTC 方言测试、ES 历史清场 5 场景全绿。
|
||||
- **FS7** 影子对拍 Diff 工具:`FlightStoreDiffTool` 递归 AST 字段归一化比较与已知合法偏离识别。
|
||||
- **FS8** 文档回改:架构、设计、用户故事与项目规范同步收敛。
|
||||
|
||||
Reference in New Issue
Block a user