fix(worker): 固定异步准入候选避免执行槽空转
异步任务在调度器准入后,Worker 会再次按实时负载排序候选;排序变化会让已准入任务退回 waiting,同时继续占用 River 执行槽,导致高并发吞吐塌陷。 执行前复用已持久化的 admitted 候选并稳定置顶,候选失效时仍保留原有重选路径;增加候选固定与非准入场景单测。 验证:Go 全量测试、runner race、go vet、OpenAPI 生成一致性、迁移安全检查通过。
This commit is contained in:
@@ -422,6 +422,18 @@ func (s *Service) executeWithToken(ctx context.Context, task store.GatewayTask,
|
||||
return Result{Task: failed, Output: failed.Result}, err
|
||||
}
|
||||
}
|
||||
var asyncAdmission *store.TaskAdmission
|
||||
if distributedAdmission && task.AsyncMode {
|
||||
asyncAdmission, err = s.loadAsyncTaskAdmission(ctx, task)
|
||||
if err != nil {
|
||||
return Result{}, err
|
||||
}
|
||||
var pinned bool
|
||||
candidates, pinned = pinCandidatesToTaskAdmission(candidates, asyncAdmission)
|
||||
if pinned {
|
||||
s.observeTaskAdmission("candidate_pinned")
|
||||
}
|
||||
}
|
||||
pricingByCandidate := map[string]resolvedPricing{}
|
||||
preprocessingByCandidate := map[string]parameterPreprocessResult{}
|
||||
reservationBillings := []any(nil)
|
||||
@@ -561,7 +573,7 @@ func (s *Service) executeWithToken(ctx context.Context, task store.GatewayTask,
|
||||
var admissionErr error
|
||||
if task.AsyncMode {
|
||||
var alreadyAdmitted bool
|
||||
admissionResult, alreadyAdmitted, admissionErr = s.activeAsyncTaskAdmission(ctx, task, plan)
|
||||
admissionResult, alreadyAdmitted, admissionErr = s.activeAsyncTaskAdmission(ctx, task, plan, asyncAdmission)
|
||||
if admissionErr == nil && !alreadyAdmitted {
|
||||
admissionResult, admissionErr = s.tryTaskAdmission(ctx, task, plan, "")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user