Skip to content

[Bug] add_latency 对 data-UDP(UDP/QUIC 数据流)选路失效 #1072

Closed

Description

@itoywh

[Bug] add_latency 对 data-UDP(UDP/QUIC 数据流)选路失效

现象

min 策略下给节点配 add_latency 想人为偏置/指定某节点:TCP、DNS-UDP 生效,但 data-UDP(QUIC / 游戏等真实 UDP 流量)完全不生效——人工加权被静默忽略,实际按配置顺序/顺序兜底选节点。

根因

偏移量只在 if hasLatency { 内并入排序值:

// component/outbound/dialer/alive_dialer_set.go (NotifyLatencyChange)
if hasLatency {
    sortingLatency = rawLatency + a.dialerToLatencyOffset[dialer]
}

而 data-UDP 没有延时探针(全库无 udp_check_data),其 Latencies10 永远为空 → hasLatency 对所有节点恒为 false → 偏移量永不进 sortingLatency。所有 data-UDP 节点排序分都是 0,平局按配置序 → add_latency 成 no-op。

本质:开发者把 add_latency 建模成「延时增量」(没延时就没东西可加);但用户语义是「无视实测、强行打破排序的人工权重」,两者在 data-UDP 上分叉。这是语义实现 bug,不是设计取舍。

影响

  • 用 add_latency 让 UDP 流量走指定节点 → 无效。
  • 与 TCP/DNS-UDP(生效)矛盾:同一组节点 DNS 走 JMS04、data 走别的节点。
  • failover 仍工作(死→顺延下一个活着的节点),只是排序不再听人工偏好。

修复

方案 A(最小侵入,治本):让偏移量无条件进 sortingLatency(3 处:NotifyLatencyChange 初始化与 !hasLatency 分支、recomputeSelectionStateLocked)。实施后 data-UDP 排序分 = 0 + add_latency,人工偏好生效且保留 failover。

→ 已实现:PR #1073(itoywh:fix/add-latency-data-udp)。

附:data-UDP 选路行为

  • 冷启动:所有节点以 alive=true 入集,配置序第一个节点被钉为首选(非流量竞速)。
  • 切换:仅「节点死 → 顺延下一个活着的(配置序)」「整组空 → 回退 DNS-UDP/TCP」;死而复活者排到队尾、不自动抢回首选。
  • 无探针 → 不会「实测变快就自动换节点」。

Activity

  1. dae-prow commented on Aug 10, 2026

    @dae-prow
    Contributor

    Thanks for opening this issue!

  2. itoywh commented on Aug 10, 2026

    @itoywh
    ContributorAuthor
  3. changed the title [-][Bug] data-UDP 连通性槽无主动探针时永久 NOT ALIVE,导致多节点组中偏置节点的 UDP/QUIC 流量被错误 failover[/-] [+][Bug] data-UDP 无主动探针 + add_latency 偏置在冷启动/无延迟数据时失效,致偏置节点 UDP/QUIC 流量被错选[/+] on Aug 12, 2026
  4. changed the title [-][Bug] data-UDP 无主动探针 + add_latency 偏置在冷启动/无延迟数据时失效,致偏置节点 UDP/QUIC 流量被错选[/-] [+][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效,致偏置节点 UDP/QUIC 流量被错选[/+] on Aug 12, 2026
  5. changed the title [-][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效,致偏置节点 UDP/QUIC 流量被错选[/-] [+][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效(集合锁定致不自愈),致偏置节点 UDP/QUIC 流量被错选[/+] on Aug 12, 2026
  6. changed the title [-][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效(集合锁定致不自愈),致偏置节点 UDP/QUIC 流量被错选[/-] [+][Bug] add_latency 偏置在 data-UDP 域失效且不自愈:offset 被 if hasLatency 跳过 + GetMinLatency 缓存短路(偏置节点其实进了 data-UDP 集合)[/+] on Aug 12, 2026
  7. changed the title [-][Bug] add_latency 偏置在 data-UDP 域失效且不自愈:offset 被 if hasLatency 跳过 + GetMinLatency 缓存短路(偏置节点其实进了 data-UDP 集合)[/-] [+][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效(偏置节点已进 data-UDP 集合,但被 GetMinLatency 增量缓存短路永久压住)[/+] on Aug 12, 2026
  8. changed the title [-][Bug] data-UDP 无主动探针 + add_latency 人工加权在冷启动/无延迟数据时失效(偏置节点已进 data-UDP 集合,但被 GetMinLatency 增量缓存短路永久压住)[/-] [+][Bug] data-UDP 无延时采集路径导致 add_latency 偏置对 UDP/QUIC 选路完全失效(结构性 no-op)[/+] on Aug 12, 2026
  9. changed the title [-][Bug] data-UDP 无延时采集路径导致 add_latency 偏置对 UDP/QUIC 选路完全失效(结构性 no-op)[/-] [+][Bug] `add_latency` 对 data-UDP(UDP/QUIC 数据流)选路完全失效(结构性 no-op)[/+] on Aug 12, 2026
  10. changed the title [-][Bug] `add_latency` 对 data-UDP(UDP/QUIC 数据流)选路完全失效(结构性 no-op)[/-] [+][Bug] add_latency 对 data-UDP(UDP/QUIC 数据流)选路失效[/+] on Aug 12, 2026
  11. added 2 commits that reference this issue on Aug 12, 2026
    dd7498e
    1a6cd68
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions