现象
在 cc-switch web serve 里启用自动故障转移(set_auto_failover_enabled)报错:
automatic failover requires daemon-managed proxy routing for this app。
根因(已排查)
- 故障转移的实际路由在
src/proxy/provider_router.rs:每个请求读 auto_failover_enabled + 故障转移队列 + 断路器选 provider。进程内代理本身能做这部分。
- 但启用自动故障转移要过
ProxyService::ensure_proxy_routing_active_for_app → has_managed_worker_for_app(services/proxy.rs:1768-1807),要求该 app 有一个 daemon 托管的 worker(RuntimeSessionKind::ManagedExternal 且进程存活并探测匹配,或 daemon status 含该 app 的 worker)。
- web 的
set_proxy_takeover_for_app → enable_takeover_for_app_unlocked 是进程内 takeover(改 DB 标志),不通过 IPC 让 daemon 起 managed worker。
- 实测:即使
daemon start --detach 在跑,web 设置 takeover 后 daemon 仍 worker: not running,门不过。
ProxyService::start_managed_session(delegates to daemon via IPC)未暴露为任何 CLI/web 命令。
需要做的
让 web 的 takeover / 启动代理流程在 daemon 可用时通过 IPC 委托 daemon 起 managed worker(start_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() 隐藏,避免误点报错。待本集成完成后取消隐藏。
现象
在
cc-switch web serve里启用自动故障转移(set_auto_failover_enabled)报错:automatic failover requires daemon-managed proxy routing for this app。根因(已排查)
src/proxy/provider_router.rs:每个请求读auto_failover_enabled+ 故障转移队列 + 断路器选 provider。进程内代理本身能做这部分。ProxyService::ensure_proxy_routing_active_for_app→has_managed_worker_for_app(services/proxy.rs:1768-1807),要求该 app 有一个 daemon 托管的 worker(RuntimeSessionKind::ManagedExternal且进程存活并探测匹配,或 daemon status 含该 app 的 worker)。set_proxy_takeover_for_app→enable_takeover_for_app_unlocked是进程内 takeover(改 DB 标志),不通过 IPC 让 daemon 起 managed worker。daemon start --detach在跑,web 设置 takeover 后 daemon 仍worker: not running,门不过。ProxyService::start_managed_session(delegates to daemon via IPC)未暴露为任何 CLI/web 命令。需要做的
让 web 的 takeover / 启动代理流程在 daemon 可用时通过 IPC 委托 daemon 起 managed worker(
start_managed_session),从而满足has_managed_worker_for_app,之后 provider_router 的逐请求故障转移即可生效。涉及:
#[cfg(unix)])现状处理
isWeb()隐藏,避免误点报错。待本集成完成后取消隐藏。