Files
msgexchange-v2/src/main/resources/db/migration/V1.3.2__backfill_todo.sql
T
windyboy 48a27b26dd feat(jobs): 提交后回填补偿落库 backfill_todo 并到期重试 (ACM2-29 P2-3)
- V1.3.2 迁移:backfill_todo 持久补偿表(attempts/next_attempt_at/last_error)
- BackfillTodoRepository 接口 + PG 实现与 stub;record 幂等 upsert
- BackfillSweepJob:到期重试,成功即删,失败指数退避(30s 起步封顶 15 分钟);
  触发点 = InboxPoller 每轮心跳(重启即对账)+ JobExecutor BACKFILL_SWEEP 类型
- MessageProcessor/SnapshotFlow 回填失败落待办(成功终态不降级,业务不重放);
  SKIPPED 重复报文同样补偿共享信箱回填,防止重复信件被反复轮询
- 新测试:扫描重试/退避/恢复对账 4 用例;快照回填失败落库断言;
  跳过路径补偿落库断言

验证:MSGX_PG_PORT=5433 真实 PG 全量 102 用例 0 失败 0 跳过 (ACM2-29)
2026-09-08 13:04:43 +08:00

19 lines
856 B
SQL

-- flight-state-design-v2 §5 (ACM2-29 P2-3): 提交后共享信箱回填的持久补偿待办。
-- 业务事务已提交(PROC_STATE=SUCCEEDED)后回填失败 → 落本表重试;
-- 回填失败不得把已成功的业务事务重新标记为失败,也不得重放业务变更。
CREATE TABLE IF NOT EXISTS backfill_todo (
cminmsgs_id BIGINT PRIMARY KEY,
sndr VARCHAR(64) NOT NULL,
type VARCHAR(32) NOT NULL,
styp VARCHAR(32),
seqn BIGINT,
attempts INTEGER NOT NULL DEFAULT 0,
next_attempt_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
last_error VARCHAR(512),
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_backfill_todo_due ON backfill_todo (next_attempt_at);