From 0d6adb373d002bc2be06d37a5f98c6b965c8a4b1 Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 16 Jul 2026 13:53:41 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0522=E4=B8=8A=E6=B8=B8?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=88=87=E5=8F=B7=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/platform-infra/sub2api-codex-pool.yaml | 4 +++ .../R7_Task_Report.md | 26 +++++++++++++++++++ docs/MDTODO/sub2api-upstream-reliability.md | 4 +++ 3 files changed, 34 insertions(+) create mode 100644 docs/MDTODO/details/sub2api-upstream-reliability/R7_Task_Report.md diff --git a/config/platform-infra/sub2api-codex-pool.yaml b/config/platform-infra/sub2api-codex-pool.yaml index a673a389..0dce0f91 100644 --- a/config/platform-infra/sub2api-codex-pool.yaml +++ b/config/platform-infra/sub2api-codex-pool.yaml @@ -55,6 +55,10 @@ runtime: keywords: [concurrency limit exceeded, upstream service temporarily unavailable, input must be a list] durationMinutes: 1 description: 明确命中 504 上游并发限制、暂时不可用或 Responses input 列表兼容错误时短时冷却当前账号。 + - statusCode: 522 + keywords: [upstream request failed] + durationMinutes: 1 + description: 明确命中 522 上游连接超时并返回通用失败信息时短时冷却当前账号。 - statusCode: 524 keywords: [upstream request failed, service temporarily unavailable, overloaded, concurrency limit exceeded] durationMinutes: 1 diff --git a/docs/MDTODO/details/sub2api-upstream-reliability/R7_Task_Report.md b/docs/MDTODO/details/sub2api-upstream-reliability/R7_Task_Report.md new file mode 100644 index 00000000..5c04d41f --- /dev/null +++ b/docs/MDTODO/details/sub2api-upstream-reliability/R7_Task_Report.md @@ -0,0 +1,26 @@ +# R7 任务报告 + +## 结论 + +- 近期页面记录中,外部客户可确认的失败为 `xiaoyang@test.com` 请求 `10766195-ee99-4c84-8bbc-e21df23e141f`:`/v1/messages/count_tokens` 在账号 `https://sub2.pokexiao.com pro 0.05` 等待 60 秒后因 transport `context canceled` 返回 502;该 handler 没有进入 Sub2API failover 事件链,现有 runtime 模板无法修复,后续若要求彻底解决需官方源码增加 count_tokens failover。 +- 自用池请求 `24cc5f1b-e1e8-4ca1-b73d-b4735e55b3d4` 的真实 upstream 状态为 522,响应为 `Upstream request failed`,账号 `https://sub.yjxm1221.top pro 0.06` 原规则不含 522,未触发临时不可调度。 +- owning YAML 的 `codex-upstream-failover` 通用模板新增 `522 + upstream request failed`,冷却 1 分钟;未修改 Sub2API 源码、版本、优先级、容量或外部哨兵。 + +## 应用与对账 + +- dry-run 使用 configured-policy 自动选集,精确排除 `lyon9801 0.0`;选中 9 个 API-key 账号,唯一差异为规则数 `8 -> 9` 和状态码新增 522。 +- confirm 结果:selected=9、writeSucceeded=9、writeFailed=0、reconciled=9、mismatched=0。 +- 账号 `https://sub.yjxm1221.top pro 0.06` 回读为 `RULES=9`,状态码 `400,429,500,502,503,504,522,524,529`。 + +## 诊断纠正 + +- 内部 `monitor` 的请求 `643ab721-65ae-4f21-a119-2a5e81abb31f` 和 `78b55ec3-406d-4429-ac1e-8118094a8090` 虽有 upstream 502,但客户最终均为 499,前者已发生多次 failover;不应计为客户可见错误或账号扣分。 +- `lyon9801` 请求 `7ae72409-e5d1-4c14-8963-d63179b4cc35` 在 569ms 因 `context canceled` 返回 499,不是上游故障。 +- upstream 524 样本 `afffce5c-9eb0-4226-b765-85312ca31af0` 最终为客户 499,并记录 `failover_aborted_client_disconnected`;不能把 upstream phase 524 直接计为客户穿透。 +- 修复后 15 分钟窗口中,自用池客户错误为 0;盈利池唯一聚合错误 `430c8303-f7e0-4a25-bf9c-e988a5805660` 经 trace 证实为内部 monitor 在 30.455 秒取消、最终 499,并非外部客户 502。 + +## 验证 + +- `bun scripts/cli.ts check --syntax-only`:11/11 通过。 +- `git diff --check`:通过。 +- `codex-pool plan` 正确解析模板,但被既有本地 `config.toml.yjxm1221*` 缺失阻断;与本次 YAML 规则无关。 diff --git a/docs/MDTODO/sub2api-upstream-reliability.md b/docs/MDTODO/sub2api-upstream-reliability.md index 13694149..01aa9a60 100644 --- a/docs/MDTODO/sub2api-upstream-reliability.md +++ b/docs/MDTODO/sub2api-upstream-reliability.md @@ -295,3 +295,7 @@ ## R6 [completed] 处理 `529 Overloaded / API is at capacity` 客户可见错误:以 Sub2API 原生 Ops 证据锁定未触发 failover 的账号和规则缺口,在通用非 auth API-key 临时不可调度模板补 529 一分钟冷却并精准批量应用,排除 lyon9801,完成 runtime 回读和修复后短窗口复核,完成任务后将详细报告写入[任务报告](./details/sub2api-upstream-reliability/R6_Task_Report.md)。 + +## R7 [completed] + +修复近期真实上游 522 穿透:基于账号 https://sub.yjxm1221.top pro 0.06 请求 24cc5f1b-e1e8-4ca1-b73d-b4735e55b3d4 的原生 Ops 证据,在通用 codex-upstream-failover 模板增加 522 与真实响应关键词 upstream request failed 的 1 分钟临时不可调度规则,dry-run 后精准批量应用到已配置同类策略的非 lyon API-key 账号并逐账号回读;同时纠正内部 monitor 502、客户 499 和 upstream phase 524 不应计为客户可见错误的分析口径,不修改 Sub2API 源码、版本或外部哨兵,完成任务后将详细报告写入[任务报告](./details/sub2api-upstream-reliability/R7_Task_Report.md)。