fix(worker): 收敛异步重准入到调度器
准入租约失效时 Worker 仅释放执行准备并短暂让出 River 槽位,由异步调度器统一恢复 waiting 或无有效租约的任务,避免多 Worker 同时争抢全局容量锁并放大数据库同步提交等待。\n\n调度扫描覆盖到期且可运行的 scheduled/available/retryable River 任务,但跳过正在执行或仍持有有效准入租约的任务;新增 PostgreSQL/River 状态集成回归测试。\n\n验证:Go 全量测试、go vet、runner/store race、gofmt、迁移安全检查通过;专用数据库集成用例因本机未配置 AI_GATEWAY_TEST_DATABASE_URL 明确跳过。
This commit is contained in:
@@ -721,13 +721,26 @@ SELECT admission.task_id::text
|
||||
FROM gateway_task_admissions admission
|
||||
JOIN gateway_tasks task ON task.id = admission.task_id
|
||||
LEFT JOIN river_job job ON job.id = task.river_job_id
|
||||
WHERE admission.status = 'waiting'
|
||||
AND admission.mode = 'async'
|
||||
WHERE admission.mode = 'async'
|
||||
AND task.status = 'queued'
|
||||
AND task.next_run_at <= now()
|
||||
AND (
|
||||
admission.status = 'waiting'
|
||||
OR (
|
||||
admission.status = 'admitted'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM gateway_concurrency_leases lease
|
||||
WHERE lease.task_id = admission.task_id
|
||||
AND lease.released_at IS NULL
|
||||
AND lease.expires_at > now()
|
||||
)
|
||||
)
|
||||
)
|
||||
AND (
|
||||
task.river_job_id IS NULL
|
||||
OR job.id IS NULL
|
||||
OR job.state NOT IN ('available', 'pending', 'retryable', 'running', 'scheduled')
|
||||
OR job.state <> 'running'
|
||||
)
|
||||
ORDER BY admission.priority ASC, admission.enqueued_at ASC, admission.task_id ASC
|
||||
LIMIT $1`, limit)
|
||||
|
||||
Reference in New Issue
Block a user