- 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)
19 lines
856 B
SQL
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);
|