docs(acm2-75): 按三轮复审修正交接口径、单实例声明与日计划幂等归属
This commit is contained in:
+12
-10
@@ -18,7 +18,7 @@
|
||||
| 处理标记 | 信箱行上表示已处理的值。读取条件是「处理时间为空」;处理完成时写入完成时刻。本系统只填空值,不回撤、不覆盖。 |
|
||||
| 落信 | 报文写入信箱成为一行;入站由 CIIMS adapter 或兼容入口写入,出站由本系统写入 `COUTMSGS`;入站报文写进信箱后可能尚未登记。 |
|
||||
| 登记 | 本系统在自有 PG 为这条报文建立处理记录,排队等待处理。 |
|
||||
| 处理完成 | 该消息的全部本地副作用已持久化、对外投影(若有)已写成功;此后才允许回填与投递(`US-03` AC4)。判据按类别:航班增量与删除=写入自有 PG 且 Redis 投影成功(`US-05` AC4、`US-06` AC1);日计划=整包写入完成且按快照刷新 Redis(`INV-31`);静态参考数据=该类落库成功,无投影步骤(`US-13` AC1/AC5);非法或不支持的报文=终态留档,无业务副作用(`US-03` AC2)。 |
|
||||
| 处理完成 | 该消息的全部本地副作用已持久化、对外投影(若有)已写成功;此后才允许回填与投递(`US-03` AC4)。判据按类别:航班增量与删除=写入自有 PG 且 Redis 投影成功(`US-05` AC4、`US-06` AC1);日计划=整包写入完成且按快照刷新 Redis(`INV-31`);静态参考数据=该类落库成功,无投影步骤(架构「主流程」);非法或不支持的报文=终态留档,无业务副作用(`US-03` AC2)。 |
|
||||
| 回填 | 把处理标记写回信箱行。 |
|
||||
| 投递 | 读待发事件发 Kafka。 |
|
||||
| Redis 投影 | 供页面与 `GET /all/flights` 查询的航班数据;只由本系统写入和移除,不作权威。 |
|
||||
@@ -48,7 +48,7 @@
|
||||
- **C-15** 处理标记只在空值上写入处理完成时刻,写完不回撤、不覆盖已有值。`(本系统单方承诺)`
|
||||
- **C-16** 回填失败的行保留记录并告警,记录在对应信箱行被清除前保持可查。`(本系统单方承诺)`
|
||||
- **C-30** 信箱读取口径:按配置周期读取「处理时间为空」的行,按编号升序、每批有上限;单活动实例运行,不引入并行消费者。
|
||||
- **C-34** 切换与回退以信箱处理标记交接(`OPS-4`、`PRE-1`):切回旧系统前,「已终态且已回填」必须清零——标记写上的行才算交接完成。放弃自动重试的行标记仍为空(放弃不等于标记已确认),本系统没有任何能阻止旧系统消费它的可观察状态(`C-15` 只填空值、不覆盖):必须先人工恢复重试至打标,或与库方另行定处置(`Q9`);否则这些行切回后会被旧系统再处理。已登记、未到处理完成的消息同样没有交接状态。
|
||||
- **C-34** 切换与回退以信箱处理标记交接(`OPS-4`、`PRE-1`):切回旧系统前,「已终态但未回填」的行必须清零——每条终态行的处理标记都已写上才算交接完成。放弃自动重试的行标记仍为空(放弃不等于标记已确认),本系统没有任何能阻止旧系统消费它的可观察状态(`C-15` 只填空值、不覆盖):必须先人工恢复重试至打标,或与库方另行定处置(`Q9`);否则这些行切回后会被旧系统再处理。已登记、未到处理完成的消息同样没有交接状态。
|
||||
待确认:在途消息的回退处置(`Q21`)。
|
||||
|
||||
### 2.2 上游(AODB / SIS)
|
||||
@@ -133,7 +133,7 @@
|
||||
- **INV-21** 主航班与其共享航班不出现只删一半的状态:删除共享航班时联动更新其主航班,删除主航班级联删除其共享航班(`US-06` AC2)。
|
||||
- **INV-22** 主航班与共享航班的删除在同一 PG 事务内提交。被删除的航班从 Redis 投影移除;删除共享航班时,主航班的投影随更新结果刷新。移除与刷新都成功后才算这次处理完成(`INV-17b`、`INV-23`);任一失败即未完成,下轮重做两步——移除可重复执行,刷新以重做时的结果为准。共享航班在 Redis 投影中的呈现方式、删除通知使用共享还是主航班 `FLID`,待 `Q20`、`Q4`。
|
||||
- **INV-29** 已删除航班收到 `ADFT` 时按报文内容恢复为有效航班(`US-04` AC3):恢复走正常处理路径,推进版本、刷新投影并登记事件,不因已删除而跳过或拒绝。
|
||||
- **INV-31** 日计划以整包为完成单位:每批提交只是持久化进度,处理完成在整包写入完成且 Redis 按快照刷新成功后判定(`US-07` AC4/AC5)。刷新在整包写入完成后才开始(架构「主流程」),开始前投影未被本包触碰;刷新按航班渐进,期间投影处于过渡态,成功即与快照一致;是否提供原子切换视图取决于 `Q20`。失败后整包重处理,部分进度由重处理收敛到同一目标,收敛依赖逐航班写入幂等与版本只进不退(`INV-13`、`INV-20b`);`G-FLOP-IDEMPOTENT` 闭合前收敛不可声明。
|
||||
- **INV-31** 日计划以整包为完成单位:每批提交只是持久化进度,处理完成在整包写入完成且 Redis 按快照刷新成功后判定(`US-07` AC4/AC5);刷新在整包写入完成后才开始(架构「主流程」)。刷新期间查询可见的投影状态不设契约,是否提供原子切换视图取决于 `Q20`。失败后整包重处理,收敛依赖版本只进不退与逐航班重写幂等(`INV-13`);日计划的逐航班重写幂等未补齐(`G-SCHD-SNAPSHOT`),闭合前收敛不可声明。
|
||||
|
||||
### 4.3 投影、投递、历史与参考数据
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
| CLM-8 | 出站交付承诺只到落信 | `C-24` | 能 | 只覆盖落信;ACK 与错误列语义未确认(`Q10`) |
|
||||
| CLM-9 | 处理标记的写入时刻不等于处理完成的时限 | — | 不能 | 扫描周期不构成完成时限;批次积压与单行重试都会延长实际延迟 |
|
||||
| CLM-10 | 容量与吞吐量级 | — | 不能 | 无实测数据,取得信箱日量、峰值与单报文上限后重估 |
|
||||
| CLM-11 | 配置不完整时拒绝启动;实例排他由部署保证,无运行时跨实例互斥 | `OPS-1`、`PRE-5` | 启动拒绝能;运行时排他不能 | 不引入并行主泵或分布式锁是非目标(requirements「范围与非目标」);双实例同时启动的验收针对部署红线与启动检查 |
|
||||
|
||||
## 6. 待确认事项台账
|
||||
|
||||
@@ -211,7 +212,8 @@
|
||||
| Q22 | 是否在自有 PG 留存入站原文副本,及原文提前清除时已登记消息的处置(含队头是否放行) | 不留存,原文只从信箱读取;提前清除的消息按处理失败保持未完成并告警(`C-12`) | 提前清除的消息不可恢复,处置未定 |
|
||||
| Q23 | 日计划中运营日冲突的处置 | 整包校验失败不落地(`INV-19`);冲突是否属于整包校验未定 | 冲突场景无法验收(`INV-12`) |
|
||||
| Q26 | `REF_MASTER` 的物理列、唯一键、空值存储与写入后可见时点 | 记录用类别码加识别标签识别(接口契约「静态参考数据类别与编号来源」) | admin-api 读取契约无法定稿(`C-31`) |
|
||||
| Q27 | Elasticsearch 历史索引、文档 ID、字段映射、成功判据、写入结果不明的对账与幂等策略 | 历史写入确认成功才删实时数据(`D1`、`INV-28`) | 历史链路无法验收(`US-14`;`G-FLIGHT-HIST-RETENTION`) |
|
||||
| Q27 | Elasticsearch 历史索引、文档 ID、字段映射、成功判据、保留期与容量上限、写入结果不明的对账与幂等策略 | 历史写入确认成功才删实时数据(`D1`、`INV-28`) | 历史链路无法验收(`US-14`;`G-FLIGHT-HIST-RETENTION`) |
|
||||
| Q28 | `REQ_TRACK` 已结案记录的保留期取值 | 到期清理没有可依据的窗口(`G-REQ-TRACK-RETENTION`) | 请求历史清理无法实现(`US-09`) |
|
||||
|
||||
## 7. 当前已知偏差
|
||||
|
||||
@@ -222,8 +224,8 @@
|
||||
| `G-RESP-GUARD` | `SCHD-RESP` 没有过期判断,晚到的应答也会更新本地数据 | `US-07`;`C-23` |
|
||||
| `G-REQ-TRACK` | 出站请求没有跟踪:登记、编码、超时与应答匹配都没有实现 | `US-09`;`C-24` |
|
||||
| `G-REQ-OPEN-UNIQUE` | 同一报文类型同时最多一条已落信、未结案请求的限制没有实现;待发送登记不算占用该名额 | `US-09` |
|
||||
| `G-REQ-TRACK-RETENTION` | `REQ_TRACK` 已结案记录的保留期取值未定,到期清理作业没有可依据的窗口 | `US-09` |
|
||||
| `G-FLIGHT-HIST-RETENTION` | 历史存储的保留期与容量上限未定 | `INV-28`;实时数据删除后历史是唯一副本 |
|
||||
| `G-REQ-TRACK-RETENTION` | `REQ_TRACK` 已结案记录的保留期取值未定,到期清理作业没有可依据的窗口(取值待 `Q28`) | `US-09` |
|
||||
| `G-FLIGHT-HIST-RETENTION` | 历史存储的保留期与容量上限未定(取值待 `Q27`) | `INV-28`;实时数据删除后历史是唯一副本 |
|
||||
| `G-FLOP-IDEMPOTENT` | 逐类幂等规则未补齐 | `INV-20b`;`CLM-3` |
|
||||
| `G-FLOP-SEMANTICS` | `STYP` 没有白名单,`ROUT` 未限制 4 条,运行状态落点与已删除航班的处理与 `US-05` 不符 | `US-05`;`INV-14b` |
|
||||
| `G-FLOP-UNMAPPED` | [XSD](legacy/unisysaodbsis.xsd)「FLOP 元素」里有些字段没有解码或映射错了,会被静默丢掉 | `US-05` |
|
||||
@@ -231,7 +233,7 @@
|
||||
| `G-SRVT-VIPF` | `SRVT`、`VIPF` 两个集合没有落到持久化明细 | `US-05` |
|
||||
| `G-SCAN-PREDICATE` | 收报仍按水位扫描,不是按「处理时间为空」读取 | `US-01`;`INV-2b` |
|
||||
| `G-REDIS-PROJECTION` | Redis 投影没有写入与移除路径 | `US-05`、`US-06`、`US-07`、`US-12` |
|
||||
| `G-SCHD-SNAPSHOT` | 日计划快照不删除缺席航班、不清除未携带字段,也没有分批 | `INV-15b`;`INV-17b` |
|
||||
| `G-SCHD-SNAPSHOT` | 日计划快照不删除缺席航班、不清除未携带字段,也没有分批;逐航班重写幂等未补齐 | `INV-15b`;`INV-17b`;`INV-31` |
|
||||
| `G-PROC-CLEANUP` | 处理记录的到期清理作业未实现 | `US-11`;`INV-25` |
|
||||
| `G-REF-DATA` | 静态参考数据没有处理,当前按「合法但不支持」跳过并回填;参考数据表与 admin-api 直读未落地 | `US-13`;`US-03` |
|
||||
|
||||
@@ -245,7 +247,7 @@
|
||||
| INV-30 | `US-03` AC2/AC5 | 死信与跳过留档且无业务副作用;错误在对应处理记录上可查 |
|
||||
| INV-6、INV-16 | `US-03` AC3 | 失败回滚后消息仍在未完成;已提交结果不被副作用回滚 |
|
||||
| INV-7、INV-8 | `US-10` AC1/AC2 | 标记只写一次;重启后继续,写不上的有记录与告警 |
|
||||
| INV-9 | `US-01` AC2 | 同一编号重复出现时,处理记录数不增加 |
|
||||
| INV-9、PRE-7 | `US-01` AC2、`US-03` AC5 | 同一编号重复出现时处理记录数不增加;相同业务身份、不同编号的行先比对内容——一致跳过留档,不一致留档、告警、不产生业务效果,处置待 `Q15` |
|
||||
| INV-10、C-29 | `US-08` AC1/AC2/AC3 | `msg` 单条变更、`schd` 批量;失败重试后仍能投出且同一 `FLID` 顺序不颠倒(端到端保序待 `Q4`,见 `CLM-7`);一直失败的记录保留可查并告警 |
|
||||
| INV-11b | 架构「系统定位与范围」 | 航班当前态的权威写入只在自有 PG |
|
||||
| INV-12、INV-13 | 架构「必须保持的约束」、`US-04` AC1 | 运营日写入后不变,没带计划时间的航班留空;重复消息不推进版本 |
|
||||
@@ -255,7 +257,7 @@
|
||||
| INV-17b | `US-03` AC4、`US-05` AC4、`US-06` AC1 | 投影写失败时,没有终态与回填意图落库;处理完成前事件不可投递 |
|
||||
| INV-18 | `US-14` AC4 | 历史清理跳过正在被消息处理的航班 |
|
||||
| INV-19 | `US-07` AC1 | 校验失败后本地数据与版本不变 |
|
||||
| INV-31 | `US-07` AC4/AC5 | 分批失败后整包重处理收敛到同一目标(`G-FLOP-IDEMPOTENT` 闭合前无法验证);Redis 在整包写入完成后按快照刷新,成功即与快照一致 |
|
||||
| INV-31 | `US-07` AC4/AC5 | 分批失败后整包重处理收敛到同一目标(`G-SCHD-SNAPSHOT` 闭合前无法验证);Redis 在整包写入完成后按快照刷新,成功即与快照一致 |
|
||||
| INV-20b、CLM-3 | `US-01` AC2、`US-03` AC3、`US-05` AC1/AC2 | 重复执行不增加业务效果;逐子类型规则与幂等矩阵在 `Q8`、`G-FLOP-IDEMPOTENT`、`G-FLOP-SEMANTICS` 闭合前无法验证 |
|
||||
| INV-21、INV-22、INV-28 | `US-06` AC1/AC2、`US-14` AC3 | 主/共享删除联动后没有半删状态;删除事件在实时数据删除前登记(`D1`),投递按至少一次随后完成;移除与刷新任一失败时下轮重做 |
|
||||
| INV-23 | `US-05` AC4、`US-06` AC1 | 投影写失败的消息下轮仍被处理 |
|
||||
@@ -268,7 +270,7 @@
|
||||
| CLM-9(不承诺完成时限) | `OPS-2` | 积压、处理失败、投递失败、回填失败各有指标与告警(架构「总体架构」) |
|
||||
| CLM-10(容量假设) | `OPS-2` | 上线前用现场量级重估 |
|
||||
| C-34 | `OPS-4` | 回退演练:回填了结后切回,旧系统不重处理已产生业务效果的消息;在途窗口处置见 `Q21` |
|
||||
| PRE-5(部署约束) | `OPS-1` | 双实例同时启动只允许一个实例处理消息;配置不完整拒绝启动属 `OPS-1` 自身验收,无不变量承载 |
|
||||
| CLM-11(单实例防线) | `OPS-1` | 配置错误启动失败测试;双实例同时启动的验收针对部署红线与启动检查,系统不提供运行时跨实例互斥 |
|
||||
| C-35(测试隔离承诺) | `OPS-3` | 测试环境配置核对:独立数据库、Redis 与 Kafka 主题,不连接生产信箱 |
|
||||
|
||||
## 9. 契约数值
|
||||
|
||||
Reference in New Issue
Block a user