只有第一发失败要查冷启动与连接重试.md
分诊要点
- 失败点是稳定的、可重复的(每次会话首发、耗时相近)⇒ 排除随机 bug,找「一次性初始化」的东西。
- 失败发生在业务动作之前:本例卡在写用户消息 + 建 turn 租约的 DB 操作,在
reply.hijack()(设 200)之前,所以拿到的是未映射的内部错误(领域错误会是 409/400),而不是明确的业务错误码。 - 错误文本看不到时,先确认日志级别(
logger: false会让「日志干净」变成假象),再决定要不要临时开日志复现。
修在哪一层
补最底层那格:给 DB 写入加 1~2 次短退避重试。不要动「整轮 turn 自动重跑」——一个 turn 里可能已经产生副作用(模型已调用、已计费、已建提案),盲目重跑会重复执行。
第二处实例(2026-08-03 @ 15:54)
同一种形态再现于 Neon:P1001: Can't reach database server 发生在 migrate deploy 时,SQL 根本没执行(migration 仍是待执行状态);同一命令重试即成功。判据一样 —— 连接层的瞬时失败不要当成「SQL 写错了」,先复测连接(域名解析 / 5432 端口 / 能否读库状态),再决定重跑还是查语句。
相关
- 迁移文件存在不等于数据库已升级
- 长任务不要用固定超时判定
- 异步补齐长期不生效要查写入失败
- 先分清平台错误还是应用错误 —— 从错误形态反推归属层
- 改配置后要确认部署真的用了新配置