| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| activity | ||
| admin | ||
| ai | ||
| assistant | ||
| auth | ||
| clinical-gap | ||
| clinical-signals | ||
| facts | ||
| mcp | ||
| patient | ||
| persona | ||
| plan | ||
| plan-aggregate | ||
| realtime-coach | ||
| sync | ||
| weixin-aibot |
## 一、cron 防重入(sync-incremental.scheduler.ts)🔴 2026-08-29 生产事故:plan 段耗时涨过 2 小时后,cron(每 2 小时)照常触发下一轮, 两轮 plan 段并发抢同一批 I/O → 都更慢 → 更易被再下一轮套圈 → 雪崩。 实测 08-28 20:15 起连续多轮 plan 段一次都没跑完;到 08-29 11:19(即触发原因 reparse 结束 1.4 小时后)仍有两轮在并行互拖 —— 雪崩是**自持**的,源头消失也不会自愈。 现有的锁都挡不住,这是本修复存在的理由: ① NestJS CronJob **默认不防重入** —— 上一次回调还在 await,下一次照样进; ② sync_logs 的 partial UNIQUE(host_id) WHERE status='running' 只覆盖**摄入段**, 摄入一结束锁就放了,而最慢的 persona / plan 段还在跑。 所以必须在回调入口用进程内 Set 挡。跳过而非排队:摄入是游标增量,下轮自然 catchup; plan 是时间驱动全量,跳一轮只是晚 2 小时评估,远好过雪崩。 释放放在 finally —— 抛异常时不释放会把该 host 锁死到进程重启。 tests/scheduler-reentrancy-guard.spec.ts 锁四条:并发跳过 / 结束后放行 / 按 host 而非全局 / 抛异常也释放。 ## 二、reparse 两处 bind 变量溢出(cold-import.service.ts) `patientId: { in: [...] }` 直接塞完整患者清单会撞 PG 的 32767 上限。 实跑路径(第 3 步统计受影响患者)—— 2026-08-29 生产实测:18 万患者的 reparse 跑满 61/61 批、写完全部事实(superseded=9,062)之后**倒在最后一步**: Assertion violation: too many bind variables ... received 32769 6.6 小时的活全干完,只因收尾统计炸掉而 exit 1。 dry-run 路径同病:>3.2 万患者直接崩,而 --patients-file 的文档恰恰说 「按受影响患者收窄是最有效的提速手段(可达 250 倍)」—— 最需要先 dry-run 探路的 大清单场景,正好是它唯一不工作的场景。 两处都按 3000 分块(与 PAC_REPARSE_BATCH 同款),每块 3001 个变量,离上限很远。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| activity | Loading commit data... | |
| admin | Loading commit data... | |
| ai | Loading commit data... | |
| assistant | Loading commit data... | |
| auth | Loading commit data... | |
| clinical-gap | Loading commit data... | |
| clinical-signals | Loading commit data... | |
| facts | Loading commit data... | |
| mcp | Loading commit data... | |
| patient | Loading commit data... | |
| persona | Loading commit data... | |
| plan | Loading commit data... | |
| plan-aggregate | Loading commit data... | |
| realtime-coach | Loading commit data... | |
| sync | Loading commit data... | |
| weixin-aibot | Loading commit data... |