windyboy
|
09b53c77bb
|
refactor(ingress): 信箱边界层契约重构——发现与处理标记解耦、回填事实并入 PROC_STATE
收报扫描不再以 DATE_PROCESSED 为谓词:终态而未回填的行(解码失败死信等)会永久占据
有限批次,累积到 claim-batch 后收报整体停摆(US-01 条目 3 / message-lifecycle §5.3)。
ingress/InboxPoller.kt:按 ID 区间升序有界读取(ID > W),水位落 INBOX_CURSOR 并与入队
同一 PG 事务推进(中断后重扫补建);遇空洞即停,空洞超过 pipeline.max-commit-delay 判定
为永久并放行——否则水位永久停摆于一次自增回滚留下的空位。删除 InboxEnqueue(改由
insertIfAbsent 幂等入队)与 poller 内的回填扫描(消除 ingress→jobs 反向依赖)。
infra/persistence:端口按事实重画为 readRange/maxId/markProcessedIfUnmarked,标记 UPDATE
带 DATE_PROCESSED IS NULL 守卫,只把空标写为已处理(§11 单调,重复执行无副作用)。
回填事实并入 PROC_STATE(RECEIVED_AT/BACKFILL_AT/NEXT_AT/ATTEMPTS/ERROR),BACKFILL_TODO
随 V2 迁移下线;终态与回填意图是同一条 UPDATE,由处理器在自己的业务事务内落库,
message-lifecycle §4 登记的两个崩溃窗口(提交后回填前崩溃、待办二次落账失败)不再是缺口。
processing/BackfillService.kt(取代 BackfillSweepJob):终态提交后立即尝试一次,失败按
30s→15min 指数退避重试;扫描条件「终态 + 未确认标记 +(已到期 或 接收时间早于 NOW − R)」
使 §5.2 的超期期限 R 覆盖退避,中间态永不补写。死信同样可补写——回填只需消息 ID,
不再依赖 META。Pump 改用可注入 Clock。
infra/health:InboxLifecycleHealthIndicator 输出积压条数、最老未处理信龄、未回填终态数与
水位滞后(OPS-2 / §5.3 验收)。预计消化时长需吞吐采样,留待接入指标注册表时补。
配置:pipeline.max-commit-delay / overdue-backfill / backfill-batch、mailbox.processed-value
(Q2/Q6/Q7 未书面确认前取保守初值,不得为提速下调)。
不变量回归测试:死信不阻断后续发现、水位遇空洞即停与老化放行、终态+意图同事务、
超期 R 覆盖退避、中间态不补写、标记单调;InboxLifecycleJdbcSqlTest 以 H2 的 PostgreSQL
兼容模式直连验证上述 SQL 语义(不依赖 docker)。libs.h2 由 testRuntimeOnly 提为
testImplementation 以支持该用例。
验证:gradle clean test --offline → 78 tests / 0 failures / 1 skipped
(PG Testcontainers 集成用例在本机无 docker 时按既有约定 assumeTrue 跳过)。
|
2026-09-10 10:59:58 +08:00 |
|
windyboy
|
7b7b61f100
|
feat(processing): 实现自有 PostgreSQL 运营航班权威存储与单事务闭环 (ACM2-28)
- FS1: 增加 Flyway 迁移 V1.1.0__flight_schd.sql,创建 FLIGHT_SCHD 与 SCHD_GEN
- FS2: 实现 FlightSchdRepository 接口及 JdbcFlightSchdRepository 与 StubFlightSchd,增强 JdbcOps 事务管理
- FS3: 扩展 MessageProcessor 事务 2 与按 FLID 点查视图,合并变更、事件与终态入单事务提交
- FS4: SnapshotFlow SQL 化(批处理 upsert、域内差删、SQL CAS 推进与熔断保护),JobExecutor 接入 PG 清场删除
- FS5: 彻底退役 Redis 权威与写路径,移除 FlightRedisClient、Lua 脚本、健康指示器与配置残留
- FS6: 补齐 U09/U29 不变量门禁(崩溃幂等、CAS 防并发、ADFT 存活保障、非 UTC JVM/会话时区无漂移)与 FlywayMigrationTest
- FS7: 交付影子对拍比较内核 FlightStoreDiffTool 与单元测试
- FS8: 全面回改 decision-flight-state、architecture、design、user-stories 权威文档与规范
|
2026-09-07 16:12:00 +08:00 |
|
windyboy
|
e0ce863905
|
refactor(storage): ACM2-12 落地——自有 PostgreSQL 全内部状态,共享 MySQL 仅信箱
按 ACM2-12 定案把仓库存储口径从"MySQL 六辅助表"推进到最终形态:
- 迁移:删除 MySQL V2.0.0 六表脚本,新增自有 PG V1.0.0
(PROC_STATE/MSG_EVENT/PUMP_JOB/REQ_TRACK/REF_MASTER,PG 方言,REQ_TRACK.COUTMSGS_ID
按 U18 修为 BIGINT;FLIGHT_STATE 阶段 B 缓做不建表)。
- 配置:datasources.default = 自有 PostgreSQL(enabled=false 待 U05);
移除 datasources.reference/flyway.reference;新增 mailbox.shared-mysql(共享信箱,
仅 DML,不建表);test profile 显式启用 H2 内存 datasource。
- 接口/注释:Repositories KDoc 按 ACM2-12 归属(自有 PG / 信箱封装 / gen→Redis 占位 /
FLIGHT_STATE 缓做);InboxService、Pump 事务模型注释对正
(信箱外部副作用 + PG 本地事务 + 回填最终一致)。
- 文档:architecture §1/§2/§3/§4/§5(D1/D2)/§6/§7/§8、design §1/§2/§3.1/§3.4/§3.5/§6/§9、
README 全部按 ACM2-12 收口(自有 PG + 共享信箱 + Redis 动态/gen + 阶段 B 缓做)。
验证:37 测试全绿;dev stub 冒烟仍可启动、/health UP、收报 200。
信箱适配层(CminmsgMailbox/OutboxMailbox)、gen→Redis Lua、作业窗口语义、影子重设计
属 ACM2-12 Checks ②③④⑤(U05/U09 批次)。
|
2026-09-07 08:21:11 +08:00 |
|
windyboy
|
f6da0cb782
|
feat(runtime): U07 生命周期装配 + stub 装配冒烟(ACM2-10 U07/U01 遗留)
- PipelineLifecycle:ServerStartupEvent 后在专用单线程(msgx-pump/msgx-dispatcher,daemon)
拉起 Pump/Dispatcher 循环;停机 requestStop+interrupt+join;@Requires(msgx.pipeline.autostart=true)
- PipelineProps.pipeline.autostart(默认 false,生产/测试默认不自动起循环,防泄漏线程)
- stub 装配(infra/stub,@Requires(msgx.stubs=true)):7 仓储内存实装 + StubXmlCodec(未实装
→ CODEC_ERROR 走 FAILED 可重放路径)+ StubRedis + StubDeliveryPort + Holder Factory
- 配置:application-dev.yml(stubs+autostart,/env、/beans 放开,无需 DB 即可 dev 跑通);
application-test.yml(stubs=true、autostart=false);README 补 dev stub 运行说明
- PipelineSmokeTest(4):等价 /beans 装配核验 + 收报→主泵领取→FAILED(CODEC_ERROR) + U11 重放
回 PENDING + Dispatcher flush 聚合(stub 用例前清内存状态防上下文复用串扰)
- 全量测试 34 个通过
|
2026-09-06 20:53:14 +08:00 |
|
windyboy
|
821da1334c
|
feat(build): 阶段0 冒烟底座(ACM2-10 U01–U04)
- U01:接入 KSP(kotlin-ksp 2.3.0)+micronaut-inject-kotlin,Micronaut BeanDefinition 由 0→94 个生成;
移除 processing.annotations 业务包过滤(N23)
- U02:补 Gradle wrapper(9.6.1);版本矩阵单一来源——micronaut 固定 5.1.3(gradle.properties
micronaut.version,平台 BOM 最高发布版)、JDK25 口径统一、snakeyaml 版本入 catalog;
新增 .github/workflows/ci.yml 与 Dockerfile;.gitignore 补 .kotlin/.opencode/.zcode/.gradle-*
- U03:application.yml 键位修正(datasources.default/flyway.datasources.default/kafka.producers.default),
移除 logstash 死配置块、logback env 统一 MSGX_LOGSTASH_*;新增 application-dev.yml(/env、/beans
仅开发放开);PipelineProps 四嵌套类补 @ConfigurationProperties;新增 PipelinePropsBindingTest
(改值—回读离线验收,Micronaut Test 5.x 用 TestPropertyProvider)
- U04:README「数据库初始化」与 V2.0.0 脚本头声明 CMINMSGS legacy 前置(全新库需先建旧表)
|
2026-09-06 17:59:07 +08:00 |
|