fix: 修复健康检查的两个关键bug
1. 修复双重计数usage的问题: - 移除 _checkProviderHealth 中的 markProviderHealthy 调用 - 使用量计数现在只由调用方处理 2. 修复热重载timer时的竞态条件: - reload时重置 isHealthCheckRunning 标志 - 避免reload期间运行时导致新timer被跳过
This commit is contained in:
parent
642c498544
commit
9f45e77448
2 changed files with 6 additions and 2 deletions
|
|
@ -1950,8 +1950,8 @@ export class ProviderPoolManager {
|
||||||
await serviceAdapter.generateContent(modelName, requestWithSignal);
|
await serviceAdapter.generateContent(modelName, requestWithSignal);
|
||||||
|
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
// 将健康检查计入使用量(resetUsageCount=false 只会递增,不会重置)
|
// 注意:使用量计数由调用方处理(performScheduledHealthChecks/performHealthChecks)
|
||||||
this.markProviderHealthy(providerType, providerConfig, false, modelName);
|
// 这里只返回成功结果,让调用方统一处理状态更新和计数
|
||||||
return { success: true, modelName, errorMessage: null };
|
return { success: true, modelName, errorMessage: null };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
|
|
|
||||||
|
|
@ -394,6 +394,10 @@ async function startServer() {
|
||||||
if (healthCheckTimerId) {
|
if (healthCheckTimerId) {
|
||||||
clearInterval(healthCheckTimerId);
|
clearInterval(healthCheckTimerId);
|
||||||
}
|
}
|
||||||
|
// 重置运行状态,允许新的 timer 立即触发
|
||||||
|
// 否则如果 reload 时正在运行,新 timer 的第一次触发会被跳过
|
||||||
|
isHealthCheckRunning = false;
|
||||||
|
|
||||||
// 设置定时任务
|
// 设置定时任务
|
||||||
healthCheckTimerId = setInterval(async () => {
|
healthCheckTimerId = setInterval(async () => {
|
||||||
if (isHealthCheckRunning) {
|
if (isHealthCheckRunning) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue