"backend/internal/service/openai_gateway_chat_completions.go" did not exist on "bc194a7d8c0648a8ed0b4b82a27ba6bd9c771eb4"
  • ianshaw's avatar
    fix(网关): 修复账号选择中的调度器快照延迟问题 · 25b00abc
    ianshaw authored
    ## 问题描述
    调度器快照更新存在0.5-1秒的延迟(Outbox轮询间隔),导致在账号被限流或过载后的短时间窗口内,
    可能仍会被选中,造成请求失败。
    
    ## 根本原因
    账号选择逻辑依赖调度器快照(listSchedulableAccounts),但快照更新有延迟:
    - Outbox轮询: 每1秒检查一次变更事件
    - 全量重建: 每300秒重建一次
    - 时间窗口: 账号状态变更后0.5-1秒内,快照可能未更新
    
    ## 解决方案
    在账号选择循环中添加IsSchedulable()实时检查,作为第二道防线:
    1. 第一道防线: 调度器快照过滤(可能有延迟)
    2. 第二道防线: IsSchedulable()实时检查(本次修复)
    
    IsSchedulable()会检查:
    - RateLimitResetAt: 限流重置时间
    - OverloadUntil: 过载持续时间
    - TempUnschedulableUntil: 临时不可调度时间
    - Status: 账号状态
    - Schedulable: 可调度标志
    
    ## 修改范围
    ### OpenAI Gateway Service
    - SelectAccountForModelWithExclusions: 添加IsSchedulable()检查
    - SelectAccountWithLoadAwareness: 添加IsSchedulable()检查
    
    ### Gateway Service (Claude/Gemini/Antigravity)
    - 负载感知选择候选账号筛选: 添加IsSchedulable()检查
    - selectAccountForModelWithPlatform: 添加IsSchedulable()检查
    - selectAccountWithMixedScheduling: 添加IsSchedulable()检查
    
    ### 测试用例
    - OpenAI: 添加2个测试用例验证限流账号过滤
    - Gateway: 添加2个测试用例验证限流和过载账号过滤
    
    ### 其他修复
    - ops_repo_preagg.go: 修复platform为NULL时的聚合问题
    
    ## 测试结果
    所有单元测试通过 
    25b00abc
ops_repo_preagg.go 13 KB