姚章浩
a7d643635a
build / build (push) Successful in 1m27s
fix(library): 守卫按行取作业身份、同作业多代次、原作业续作与执行域准入
R1 维护/发布守卫硬编码 j.id=$1:维护类入口的 $1 是 scope/instance,作业号在 $2,
导致 update/release/ingress 六个入口正常路径全部匹配不到作业。改为按被更新行自己的
owner_job_id 生成条件,并同时要求该代次在 library_attempts 里仍活跃。
R2 认领只改 jobs.attempt_epoch 不改 attempts.epoch,第二次接管即错位;唯一索引
(job_id) 与"每次接管新 attempt 且历史不可变"矛盾。改为同作业多代次:锁作业行与
operation 行、同 owner 幂等续租、活跃未过期者让路、过期/本作业旧代次标 abandoned、
新代次 epoch=max+1,并清同 operation 其它作业行租约。迟到 write/renew/finish 一律
ErrLibraryEpochStale(finish 补了"只能在活跃态进来一次")。
R3 续作不再新建 -resume 作业:PrepareLibraryJobResume 让原业务作业回 pending 并显式
结束上一代,维护窗口/journal/预备份/写集合仍按原作业 id 归属,代次由 worker 起手递增。
R4 执行域准入改为注册 handler 前读事实:目标实况(KB/租户/schema/索引)、旧 release
路由绑定的 KB、未释放维护窗口持有者;未知或重叠即拒绝执行(不做维护动作、不停既有服务)。
同时自纠 5 项设计偏离:current 次序键取意图创建时间(旧意图迟到事实被拒)、首次锚点
改事务 FOR UPDATE + 回读且 NULL≠0、版本事件冲突只做加法且 xmax=0 才算新事实、
恢复作为新 kind=recover 意图推进 current、隔离测试加测试库护栏并清理残留 schema。
测试:真实 PG(kg-pgtest-writeset,一用例一 schema)新增 8 条集成用例覆盖上述正负例;
go test ./... 全绿(50 包)、go vet/build rc=0、web tsc + vitest 485 通过、make verify 16 项通过。
2026-10-30 17:20:40 +08:00
..
2026-10-30 17:20:40 +08:00
2026-10-30 17:20:40 +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-10-30 02:32:26 +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-30 17:20:40 +08:00
2026-10-30 01:33:45 +08:00
2026-10-29 19:08:58 +08:00
2026-10-30 17:20:40 +08:00
2026-10-29 19:08:58 +08:00
2026-10-30 01:33:45 +08:00
2026-10-30 01:33:45 +08:00
2026-10-30 17:20:40 +08:00
2026-10-30 16:16:45 +08:00
2026-10-29 01:38:46 +08:00
2026-10-30 03:09:21 +08:00
2026-10-30 17:20:40 +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-30 16:14:54 +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