mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-30 08:22:34 +00:00
`filterSchedulerExtra` 的白名单没有 `base_rpm` / `rpm_strategy` / `rpm_sticky_buffer`,写进 `sched:meta:<id>` 的精简投影因此丢掉整套 RPM 配置。 候选过滤走 `ListSchedulableAccounts`,缓存命中时读的正是这份投影: `isAccountSchedulableForRPM` 拿到的账号上 `GetBaseRPM()` 返回 0,`baseRPM <= 0` 直接放行,已配置限流的账号在选号阶段被当作未开启 RPM,单个自然分钟内被超额调度。 缓存未命中时回退数据库读到完整 extra,所以现象是间歇性的。 选中的账号随后由 `hydrateSelectedAccount` 从 `sched:acc:<id>` 重新水合, RPM 计数与用户消息队列限速读的是完整账号,不受影响;缺的只是选号阶段这道门。 修法沿用投影里既有的处理方式(见 `openai_passthrough` 一组注释):把判定依赖的 键补进白名单,而不是在判定侧另开一条读取完整账号的路径。 回归测试覆盖序列化往返后的三个键:`tiered` 子用例证明缓冲被裁掉时红区会被误判成 黄区,`sticky_exempt` 子用例证明策略被裁掉时会退回三区判定。 Refs #7225