Files
msgexchange-v2/docs/acm2-29-audit-and-simplification.md
T

10 KiB
Raw Blame History

ACM2-29 完成度核查与简化计划

日期:2026-09-08。核查基线:7c2d22e,开始时工作区干净。 范围:Plane ACM2-29 正文及评论、当前生产代码、迁移、测试与全部顶层设计文档。 本文包含本次本地修正,不代表代码已提交、发布或现场验收。

后续工作:ACM2-30,已创建在 Backlog,正文已读回核对。与 ACM2-29 的 relates_to 创建返回成功;关系查询接口报参数错误,未能独立读回复核关联。

1. 结论

ACM2-29 没有全部完成。 PostgreSQL 存储重构内核大体落地,但真实快照链路、查询接口、 部分保真与恢复不变量、数据迁移验收及 Oracle 完整适配尚未完成。 正文仍要求“全宽表零子表”,2026-09-08 09:49 评论已撤销该方案;17:44 评论又称 P2–P4 全部完成。 应按修订后的 v2 目标核查,不再按已撤销的正文补做有损槽位,也不将收口评论当作证明。

存在局部过度工程化,主要是边界重复和文档失真,不是表数量本身。 一套关系库、显式清除、明细保真、事务、FIFO、outbox 和回填重试都有具体失败场景支撑。 再次推倒已落地的无损存储会增加迁移风险;优先减少重复表示、未使用分支和无效承诺。

2. 原计划完成度

工作 核查结论 代码或证据
P0CAS 消息身份、成功后回填隔离 部分完成 SnapshotFlow 锁内 LAST_MESSAGE_ID/CAS 已实现;回填待办写入再次失败仍可冒泡到处理失败边界。
P1:无损表、命令和唯一写入口 内核完成,边界未全验收 V1.3.0、FlightStateEngine、persistNextStates9 张表/10 类集合。ROUT/ERUT、未知属性和空数组仍有缺口。
P1DNLD + 一个 FLOP 纵向链 GTDT 已有;真实 DNLD 未完成 JacksonXmlCodec 的 SCHD body 为 nullStageResult.parser 默认 null,仅测试赋值;主泵先要求 Handler,生产只注册 GTDT。
P2-1:双读对拍 历史工具工作存在,未证明现场对拍 2af71e8 曾有双读比较,7c2d22e 移除旧读路径;当前保留 FlightStoreDiffTool,未见真实输入逐字段等值报告。
P2-2:权威读、展示视图、查询接口 仓储和视图完成,接口未完成 V1.3.1、FlightSchdReadAssemblerInboxController 的 /all/flights 仍是 TODO。
P2-3:回填持久补偿 有待办和扫描,但崩溃窗口未闭合 BACKFILL_TODO 在外部回填失败之后才 record;提交后立即崩溃时没有待办;轮询入队不会重置终态。
P2-4:带数据升级 脚本可执行已验证,无损升级未完成 FlywayMigrationTest 显式确认 V1.2 删除集合数据;没有旧集合回填到明细的实现。
P2-5:锁内读取及语义矩阵 快照内核完成;文档与代码仍有偏差 增量事件在锁外预览产生;矩阵原称文本 Clear、DELY 历史保留及明细 FK,代码并不支持这些陈述。
P3-APostgreSQL 验收 现有套件全绿,不是完整协议矩阵 本次基线 100 测试、0 失败、0 跳过,含 16 JDBC + 2 迁移测试;“16 类”样例未覆盖 ERUT 与 ROUT 共存。
P3-BOracle 11g 未完成,不只是等待现场 仅两个 SQL 模板;无 DDL、驱动接入和完整绑定,其他仓储仍含 PG SQL。
P4:旧列退场、索引与回退窗口 代码退场完成,运营验收证据不足 V1.4.0 删除旧列及冗余索引;没有真实查询 EXPLAIN、备份恢复与现场回退窗口关闭证明。
32 个 Handler 未完成,后续业务范围 当前只有 GtdtHandler 生产实现,其余不应因存储收口而视为已交付。

ACM2-29 当前为 In Progress,本次没有修改其状态、正文或发表评论。

3. 具体问题与优先级

A. 本次已修:日期差删破坏保留航班明细

JdbcFlightSchdRepository.deleteDiffByDay 原先先按传入 FLID 无条件删除明细,再按 FDAY 删除主行。 输入包含跨日迁移或 FDAY=NULL 的航班时,主行保留、集合丢失,违反快照域化差删不变量。 本次先按 FDAY 选择实际删除成员,主表与明细使用同一范围;继续由主泵事务行锁保护。 没有增加表或修改已发布迁移。

新增真实 PG 测试同时覆盖目标日期删除、跨日成员保留、ADFT 无归属成员保留; 原实现测试失败,修正后通过。它揭示的是此前测试矩阵遗漏,而非原测试结果造假。

B. P0:尚未闭合的正确性边界

  1. 路线键冲突V1.3.0 的 flight_route_point 主键只有 (FLID, ORDINAL) replaceRoutes 对 ROUT/ERUT 各从 ordinal=1 写入,同航班共存时冲突。 通过新迁移改为 (FLID, ROUTE_KIND, ORDINAL),补真实 PG 往返与整事务回滚测试。
  2. 补偿落账窗口Pump/SnapshotFlow 的回填在业务提交后执行,失败才写待办; record 再失败会逃逸到 MessageProcessor.processOne 的 INFRA 落账,可能降级已提交成功态。 将回填意图与终态同事务写入;成功回填后确认待办。覆盖提交后立即崩溃、待办写失败、重复及 DEAD 终态。
  3. 落库和 wire 来源不同GtdtHandler 锁外计算 preview/SchdPush,主泵锁内重新读态计算 nextState。 改为事务内一份 nextState 同时服务持久化与状态事件;保留独立 msg 通知意图的业务语义。
  4. “无损”不是全字段保证parseCollection 可接受非对象数组元素;未知属性被存储列映射忽略; Replace([]) 的 wire 与读回不同;异常对象局部替换可能残留旧列;文本 null 清除与文档曾不一致。 固定合法字段/形状及空值黄金样例,未知输入显式拒绝,避免成功后静默丢字段。

以上 B 项本次记录为后续工作,没有声称已修复。

C. P1:真实能力和验收

  • 接通真实 XML DNLD/RESP 的解析、整包验证与路由,补无匹配/迟到 RESP;不依赖测试全局 parser。
  • 实现 /all/flights 兼容接口;按真实 wire 契约验证。
  • findAll/findByFlids 当前每航班追加 10 次集合查询;批量加载并明确同一数据库快照, 在实际规模下记录查询数和执行计划,不添加无消费方的索引或缓存。
  • V1.1→V1.4 带数据升级必须提供备份/可信输入恢复步骤和逐字段核对; 不能把“确认旧集合已经丢失”的迁移测试作为无损验收。

D. Oracle 是完整实施项

Oracle11gDialect 没有生产调用方,snapshot MERGE 的插入列包括 4 个追踪/时间字段, 模板尾部却只生成 3 个占位符;现有 PG 绑定也无法复用。 还需完整 DDL、其他仓储 SQL、生成 ID、CLOB、空值、驱动/Flyway/JDK 组合及目标 11.2 集成测试。 现场环境只影响目标库实测,不应把尚未编写的适配代码归为外部阻塞。

4. 简化方案

保留 简化或延后 原因
单库事务、行锁、身份、outbox 不新增双库镜像/分布式协调层 当前单写者范围足够,不解决假设的扩容问题。
主表 + 明细 不重回固定槽位,不重新设计整套存储 三门、重复资源、多次操作是已有契约数据。
FlightNextState 逐步消除 Handler 预览与主泵重复计算、字段集 JSON 往返 一条状态生成路径更容易证明 DB/wire 等值。
必要 Clear/Replace 删除未使用的 snapshotReplace 命令解析参数;Apply 待真实协议调用方再决定 两种解析行为实际相同,Apply 又假设了未确认的定位唯一性。
数据库列映射 复用已有单一列清单;其余资源元数据按需要集中,避免再造注册框架 减少漂移而不新增架构层。
回填待办 一条持久队列覆盖中断恢复 用事务登记意图替代失败后记录和额外重启推断。
当前 PG 实现和既定 Oracle 目标 不继续堆未运行的通用方言模板 SQL、绑定、DDL 必须作为可执行整体设计。
回归与对拍 保留可发现失败的矩阵;不为删空壳编写镜像测试 验收关注故障行为而非类数量。

本次已实施的小范围简化:读写复用 FlightSchdReadAssembler 列清单,删除 FlightDetailTables 未使用的集合清单和 hasAnyDetailRows 旧回退探测;移除 commandsFromFields 未使用的 snapshotReplace 参数及全部调用实参;更新误导的双写注释。 大范围模型、API、数据迁移和 Oracle 实施进入新 issue,避免将未验证的业务变更混入文档整理。

5. 下一批实施顺序与验收

  1. 可靠性收口:路线键、回填意图、DB/wire 单一状态、严格字段验证。 验收:真实 PG 的正常/失败/回滚/重放/空值矩阵全绿,成功终态不降级。
  2. 最小真实链路DNLD → GTDT → 完整查询 → outbox,并验证 RESP 守卫。 验收:实际 XML 输入,不手动赋值 StageResult.parser;真实存储和查询、事件契约一致。
  3. 读模型与升级:批量一致读取、实际查询计划、带数据恢复和对拍证据。 验收:查询次数按批次有界,集合/源序号/顺序保真,备份恢复有演练记录。
  4. Oracle 完整适配:按既定部署边界实现并单独验收,不借 PG 绿灯替代。 验收:目标 11.2 上新建/升级、DML、并发锁、事务恢复及字符语义通过。

每一步交付时同步对应设计及完成证据。32 Handler 扩展、阶段 B 和生产运维仍按原业务工作项推进, 本 issue 不承诺一次完成所有产品功能。不以类已存在、迁移成功或合并提交代替功能/发布验收。

6. 本次验证与文档整理

  • 基线 ./gradlew test100 测试,0 失败,0 跳过。
  • 新差删测试在原实现失败;修正后 ./gradlew test101 测试,0 失败,0 跳过, 包括 17 JDBC 与 2 Flyway 测试,Testcontainers 提供真实 PostgreSQL。
  • 未连接 Oracle,未验证现场部署、生产负载或历史数据恢复。
  • 重写航班设计为当前实现基线;历史决策归档,有效决策缩为摘要; 同步 architecture/design/user-stories/semantics/README,旧评审明确标为历史。
  • 文档入口 规定各文件唯一职责,后续不再维护多份阶段完成清单。