Skip to content

feat(proxy-group): optional persistent pin with long-failure auto-unfix#2627

Open
lovitus wants to merge 4 commits into
MetaCubeX:Alphafrom
lovitus:codex/persistent-pin-upstream-pr
Open

feat(proxy-group): optional persistent pin with long-failure auto-unfix#2627
lovitus wants to merge 4 commits into
MetaCubeX:Alphafrom
lovitus:codex/persistent-pin-upstream-pr

Conversation

@lovitus

@lovitus lovitus commented Mar 17, 2026

Copy link
Copy Markdown

背景与动机

关联 issue: #2616

url-test / fallback 场景中,部分用户会在 GUI 中显式 pin/override 某个节点,希望该选择在自动测速周期中保持一致,避免出现“UI 显示仍是 fixed,但实际流量已被自动策略改走”的体验偏差。 (有的gui会处理正常,跟随释放fixed,但是依旧和用户使用预期不符)

这个 PR 的目标是提供一个可选能力

  • 允许用户主动显式开启“固定节点持久化”;
  • 当固定节点长期异常、且组内持续存在可用替代节点时,再自动解除固定;
  • 默认配置下保持原行为不变。

兼容性说明(非常重要)

本 PR 新增行为均为显式参数开启后才生效:

  • persistent-pin 默认 false
  • pin-unhealthy-log-interval 默认 10
  • persistent-pin-auto-unfix-threshold 默认 10

也就是说,不配置这些参数时,现有用户逻辑不会被改变

修改内容与原因

1) url-test / fallback:支持可选 persistent pin

  • 文件:
    • adapter/outboundgroup/urltest.go
    • adapter/outboundgroup/fallback.go
    • adapter/outboundgroup/parser.go
    • hub/route/groups.go
    • adapter/outboundgroup/util.go
    • docs/config.yaml
  • 原因:
    • 用户显式 pin 的语义应可被保留(在开启选项时);
    • 同时避免“永久错误 pin 导致长期不可用”,所以增加可控自动解除阈值;
    • 增加日志可观测性,帮助用户和开发者定位状态变化。

2) 自动解除 pin 的触发条件(仅 persistent-pin=true

  • 固定节点连续 N 次健康检查失败;
  • 且这 N 次期间每次都存在其他可用节点;
  • 达到阈值后自动 unfix。
  • 原因:
    • 保持用户“固定优先”的意图;
    • 仅在“长期异常且有替代方案”的情况下兜底恢复可用性;
    • 避免网络整体抖动/断网时误解除固定。

3) 日志补充

  • 在 unhealthy pin 提示中输出当前 auto-unfix 计数;
  • 在计数清零时输出清零原因;
  • 达阈值自动 unfix 时输出明确日志。
  • 原因:
    • 这部分行为对运维和排障非常关键,单看“是否 unfix”不足以判断真实状态。

4) 本 PR 包含 #2615 的核心修复内容

实际验证

我已基于以下版本进行实际高频使用验证:

验证环境:

  • Windows / macOS : Clash Verge Rev
  • MacOS : ClashBar
  • 连续重度使用 4 天

结论:行为与预期一致。

额外说明

本 PR 尽量保持变更边界在 outboundgroup 相关逻辑与配置文档,未引入默认行为变化。

@wwqgtxx wwqgtxx force-pushed the Alpha branch 2 times, most recently from fc75145 to 45587c5 Compare March 27, 2026 03:30
@wwqgtxx wwqgtxx force-pushed the Alpha branch 5 times, most recently from 454dd12 to 1b2ea14 Compare April 11, 2026 04:01
@wwqgtxx wwqgtxx force-pushed the Alpha branch 2 times, most recently from 46220ad to e0a42d4 Compare April 16, 2026 02:31
@wwqgtxx wwqgtxx force-pushed the Alpha branch 5 times, most recently from 61b8d7f to 17bed79 Compare May 15, 2026 10:13
@wwqgtxx wwqgtxx force-pushed the Alpha branch 3 times, most recently from f513c49 to d67572b Compare June 12, 2026 02:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant