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)
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user