mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-08-03 19:12:04 +08:00
fix(proxy): bypass timeout and retry configs when failover is disabled
When auto_failover_enabled is false, timeout and retry configurations should not affect normal request flow. This change ensures: - create_forwarder: passes 0 for all timeout/retry params when failover is disabled, effectively bypassing these checks - streaming_timeout_config: returns 0 for both first_byte_timeout and idle_timeout when failover is disabled This prevents unnecessary timeout errors and retry attempts when users have explicitly disabled the failover feature.
This commit is contained in:
@@ -148,18 +148,40 @@ impl RequestContext {
|
|||||||
/// 创建 RequestForwarder
|
/// 创建 RequestForwarder
|
||||||
///
|
///
|
||||||
/// 使用共享的 ProviderRouter,确保熔断器状态跨请求保持
|
/// 使用共享的 ProviderRouter,确保熔断器状态跨请求保持
|
||||||
|
///
|
||||||
|
/// 配置生效规则:
|
||||||
|
/// - 故障转移开启:超时配置和重试次数正常生效(0 表示禁用超时/不重试直接故障转移)
|
||||||
|
/// - 故障转移关闭:超时配置和重试次数不生效(全部传入 0)
|
||||||
pub fn create_forwarder(&self, state: &ProxyState) -> RequestForwarder {
|
pub fn create_forwarder(&self, state: &ProxyState) -> RequestForwarder {
|
||||||
|
let (non_streaming_timeout, max_retries, first_byte_timeout, idle_timeout) =
|
||||||
|
if self.app_config.auto_failover_enabled {
|
||||||
|
// 故障转移开启:使用配置的值(0 = 禁用超时 / 不重试直接故障转移)
|
||||||
|
(
|
||||||
|
self.app_config.non_streaming_timeout as u64,
|
||||||
|
self.app_config.max_retries as u8,
|
||||||
|
self.app_config.streaming_first_byte_timeout as u64,
|
||||||
|
self.app_config.streaming_idle_timeout as u64,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// 故障转移关闭:不启用超时和重试配置
|
||||||
|
log::info!(
|
||||||
|
"[{}] Failover disabled, timeout and retry configs are bypassed",
|
||||||
|
self.tag
|
||||||
|
);
|
||||||
|
(0, 0, 0, 0)
|
||||||
|
};
|
||||||
|
|
||||||
RequestForwarder::new(
|
RequestForwarder::new(
|
||||||
state.provider_router.clone(),
|
state.provider_router.clone(),
|
||||||
self.app_config.non_streaming_timeout as u64,
|
non_streaming_timeout,
|
||||||
self.app_config.max_retries as u8,
|
max_retries,
|
||||||
state.status.clone(),
|
state.status.clone(),
|
||||||
state.current_providers.clone(),
|
state.current_providers.clone(),
|
||||||
state.failover_manager.clone(),
|
state.failover_manager.clone(),
|
||||||
state.app_handle.clone(),
|
state.app_handle.clone(),
|
||||||
self.current_provider_id.clone(),
|
self.current_provider_id.clone(),
|
||||||
self.app_config.streaming_first_byte_timeout as u64,
|
first_byte_timeout,
|
||||||
self.app_config.streaming_idle_timeout as u64,
|
idle_timeout,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,11 +199,24 @@ impl RequestContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// 获取流式超时配置
|
/// 获取流式超时配置
|
||||||
|
///
|
||||||
|
/// 配置生效规则:
|
||||||
|
/// - 故障转移开启:返回配置的值(0 表示禁用超时检查)
|
||||||
|
/// - 故障转移关闭:返回 0(禁用超时检查)
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn streaming_timeout_config(&self) -> StreamingTimeoutConfig {
|
pub fn streaming_timeout_config(&self) -> StreamingTimeoutConfig {
|
||||||
StreamingTimeoutConfig {
|
if self.app_config.auto_failover_enabled {
|
||||||
first_byte_timeout: self.app_config.streaming_first_byte_timeout as u64,
|
// 故障转移开启:使用配置的值(0 = 禁用超时)
|
||||||
idle_timeout: self.app_config.streaming_idle_timeout as u64,
|
StreamingTimeoutConfig {
|
||||||
|
first_byte_timeout: self.app_config.streaming_first_byte_timeout as u64,
|
||||||
|
idle_timeout: self.app_config.streaming_idle_timeout as u64,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 故障转移关闭:禁用流式超时检查
|
||||||
|
StreamingTimeoutConfig {
|
||||||
|
first_byte_timeout: 0,
|
||||||
|
idle_timeout: 0,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user