Skip to content

Web console: integrate auto failover with daemon-managed sessions (set_auto_failover_enabled) #309

Description

@SaladDay

现象

cc-switch web serve 里启用自动故障转移(set_auto_failover_enabled)报错:
automatic failover requires daemon-managed proxy routing for this app

根因(已排查)

  1. 故障转移的实际路由src/proxy/provider_router.rs:每个请求读 auto_failover_enabled + 故障转移队列 + 断路器选 provider。进程内代理本身能做这部分。
  2. 启用自动故障转移要过 ProxyService::ensure_proxy_routing_active_for_apphas_managed_worker_for_app(services/proxy.rs:1768-1807),要求该 app 有一个 daemon 托管的 workerRuntimeSessionKind::ManagedExternal 且进程存活并探测匹配,或 daemon status 含该 app 的 worker)。
  3. web 的 set_proxy_takeover_for_appenable_takeover_for_app_unlocked进程内 takeover(改 DB 标志),不通过 IPC 让 daemon 起 managed worker
  4. 实测:即使 daemon start --detach 在跑,web 设置 takeover 后 daemon 仍 worker: not running,门不过。
  5. ProxyService::start_managed_session(delegates to daemon via IPC)未暴露为任何 CLI/web 命令

需要做的

让 web 的 takeover / 启动代理流程在 daemon 可用时通过 IPC 委托 daemon 起 managed workerstart_managed_session),从而满足 has_managed_worker_for_app,之后 provider_router 的逐请求故障转移即可生效。

涉及:

  • web 进程 ↔ daemon 进程的 IPC 协调(web 当前在自己的 ProxyService 里做进程内 takeover)
  • 仅 Unix(daemon 是 #[cfg(unix)]
  • 需用真实流量端到端验证自动切换

现状处理

  • 队列管理(add/remove/get_failover_queue、available)、断路器配置/统计、provider 健康、重置断路器:web 下已可用
  • 自动故障转移开关:web 端已先用 isWeb() 隐藏,避免误点报错。待本集成完成后取消隐藏。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions