姚章浩
a42b101a7b
build / build (push) Successful in 1m25s
fix(library): 基线崩溃续作与维护原状态保留
父审发现三处会让目标卡死或状态对不上实际入口,逐条修:
1. 登记成功但没来得及收尾:崩溃重入会撞上"已有生效版本"直接失败,
目标留在维护里、占用也不释放。现在按「本作业+同一快照」识别为自己的
版本,只做收尾(恢复服务/开入口/释放两把占用),不重新捕获、不重写;
别人的版本仍然拒绝。捕获完成但登记失败则明确失败并写"未对目标写入"。
2. 重入覆盖原运行状态:崩溃时服务已被停住,再读一次只会读到 stopped,
写回去会让恢复阶段永远不启动写入者。AcquireInstance/LibraryMaintenance
在 owner 相同的重入时保留已持久化原状态;新作业接管已释放窗口用自己的观察。
真实 PostgreSQL 集成用例覆盖(先红后绿)。
3. 版本登记移进维护窗口:捕获/校验/登记要么一起成立、要么目标原样恢复;
记录失败时窗口已开放,治理状态同步释放,不再"显示维护中、实际已开"。
索引映射读不到时拒绝登记,不再用空摘要写证据。
顺带:
- 基线窗口统一收尾抽成 settleBaselineWindow,四种结局各有测试(成功/健康失败/
held 保持维护/已恢复则释放),并用真实 DB 用例证明 baseline 与 sync/restore
共用写互斥、幂等重试不产生第二个作业。
- 新增 cmd/librarydrill:维护隔离 → 整库预备份 → 一致性校验 → canary 漂移检测
→ 按预备份恢复 → 逐类复核 → 按原状态恢复服务。用与 worker 相同的 LIBRARY_*
配置,绝不触碰封存源。
- 目标/预备份/维护栈装配收成 internal/librarystack 一份(worker 与演练共用)。
验证:go build/vet/test 全过;TEST_DATABASE_URL 指向临时 PostgreSQL 跑
TestMaintenanceReentryKeepsOriginalServiceState(修复前失败:got app=stopped)
与 TestLibraryWriteMutexCoversBaselineJobs;本地门禁 15/15。
2026-10-29 19:08:58 +08:00
..
2026-10-29 18:16:21 +08:00
2026-10-27 14:36:24 +08:00
2026-10-08 15:41:13 +08:00
2026-10-27 14:36:24 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-10-10 15:05:20 +08:00
2026-10-09 13:55:35 +08:00
2026-10-09 13:50:23 +08:00
2026-10-10 15:05:20 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-10-12 00:10:31 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-10-27 10:42:30 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-08 12:09:34 +08:00
2026-10-29 06:55:13 +08:00
2026-10-29 13:01:37 +08:00
2026-10-29 13:01:37 +08:00
2026-10-29 19:08:58 +08:00
2026-10-29 19:08:58 +08:00
2026-10-29 18:16:21 +08:00
2026-10-29 19:08:58 +08:00
2026-10-29 19:08:58 +08:00
2026-10-29 01:38:46 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-29 18:16:21 +08:00
2026-10-27 12:14:19 +08:00
2026-10-27 14:36:24 +08:00
2026-10-27 14:36:24 +08:00
2026-10-17 17:36:07 +08:00
2026-10-10 15:29:31 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-10-08 15:41:13 +08:00
2026-10-08 15:41:13 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-10-20 08:18:03 +08:00
2026-10-19 08:49:18 +08:00
2026-10-20 08:18:03 +08:00
2026-10-18 21:50:29 +08:00
2026-10-18 23:26:55 +08:00
2026-10-28 12:28:04 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-10 15:05:20 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-10 15:05:20 +08:00
2026-10-10 15:29:31 +08:00
2026-10-10 15:05:20 +08:00
2026-09-30 10:54:06 +08:00
2026-10-08 15:41:13 +08:00
2026-10-08 15:41:13 +08:00
2026-09-30 10:54:06 +08:00
2026-10-08 17:26:26 +08:00
2026-10-10 11:36:08 +08:00
2026-09-30 10:54:06 +08:00
2026-10-10 11:36:08 +08:00
2026-09-30 10:54:06 +08:00
2026-10-10 15:29:31 +08:00
2026-09-30 10:54:06 +08:00
2026-10-10 15:29:31 +08:00
2026-10-08 15:41:13 +08:00
2026-10-08 15:41:13 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-27 10:42:30 +08:00
2026-10-27 10:42:30 +08:00
2026-09-30 10:54:06 +08:00
2026-10-14 12:36:32 +08:00
2026-10-14 12:59:52 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-14 12:36:32 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-10-14 12:36:32 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-10-28 12:28:04 +08:00
2026-10-10 12:10:46 +08:00
2026-10-10 12:10:46 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:07 +08:00
2026-10-10 15:05:20 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:07 +08:00
2026-09-30 10:54:06 +08:00
2026-09-30 10:54:06 +08:00
2026-10-18 18:11:49 +08:00
2026-10-18 18:11:49 +08:00
2026-10-13 19:40:19 +08:00