fix(processing): U08 重试闭环 + FailureScheduler + U11 重放入口(ACM2-10)

- U08 闭环:失败状态迁移移到持有 head/事件的边界内——processOne/SnapshotFlow 统一经
  ProcFailure(FAILED+attempts+退避,达上限 DEAD/EXHAUSTED 并落库 attempts);Dispatcher
  逐条与 SCHD 批量共用 retryOrDead;flushSchd 失败整批 attempts+1/指数退避,队首未到期不
  claim,达上限整批 DEAD(DLQ);loop 只作最后防线——仅 catch Exception,InterruptedException
  恢复中断位并上抛,致命 Error 不吞(异常必可见)
- 统一策略:新增 FailureScheduler(可注入 java.time.Clock + TimeFactory,backoff/exhausted
  单一来源)与 ProcFailure,MessageProcessor/SnapshotFlow/Dispatcher 共用
- U11:ReplayService 显式重放入口 + ProcStateRepository.requeueByErrorClasses——仅白名单内
  可恢复类(CODEC_ERROR/UNSUPPORTED/INFRA/EXHAUSTED)从 FAILED/DEAD 回 PENDING(attempts 清零),
  MALFORMED 永不重放
- 测试(30 个全绿):①Pump 内部异常→FAILED(INFRA)→重试达上限 DEAD;②SCHD 连续失败退避递增→
  整批 DEAD 且 KAFKA:msg 不受影响;③AssertionError/InterruptedException 不被普通恢复吞掉;
  另有 ReplayService(3)、Dispatcher 批退避、InfraBindingStartupTest(DataSource 启动级绑定)
- 收尾:.gitattributes(行尾/二进制);Gradle 10 弃用告警核查——仅来自 micronaut-application
  插件(BOM 注入 + IDE 文件生成),升级 Gradle 10 前需先升插件版本(已记录)
This commit is contained in:
windyboy
2026-09-06 19:08:02 +08:00
parent 2175c352f6
commit 73113779d2
13 changed files with 535 additions and 109 deletions
+13
View File
@@ -0,0 +1,13 @@
# 行尾/二进制规范(Gradle 10 前收尾项,ACM2-10 U02/U30
* text=auto
# shell 启动脚本必须 LFWindows 上保留可执行)
*.sh text eol=lf
gradlew text eol=lf
*.bat text eol=crlf
# 二进制一律不转行尾
*.jar binary
*.png binary
*.jpg binary
*.pdf binary