feat(queue): 增加非文本模型分布式准入队列
使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。 补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。 已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
This commit is contained in:
@@ -94,6 +94,45 @@ func TestLoadAsyncQueueWorkerEnabled(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestProcessRolePrecedenceAndCompatibility(t *testing.T) {
|
||||
t.Setenv("AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED", "false")
|
||||
cfg := Load()
|
||||
if got := cfg.EffectiveProcessRole(); got != "all" {
|
||||
t.Fatalf("legacy configuration changed process role to %q", got)
|
||||
}
|
||||
if cfg.RunsAsyncExecutionWorker() {
|
||||
t.Fatal("legacy async worker disable was ignored")
|
||||
}
|
||||
|
||||
t.Setenv("AI_GATEWAY_PROCESS_ROLE", "worker")
|
||||
cfg = Load()
|
||||
if got := cfg.EffectiveProcessRole(); got != "worker" {
|
||||
t.Fatalf("effective process role = %q, want worker", got)
|
||||
}
|
||||
if cfg.RunsPublicHTTP() || !cfg.RunsAsyncExecutionWorker() || !cfg.RunsBackgroundWorkers() {
|
||||
t.Fatalf("worker role capabilities are inconsistent: %+v", cfg)
|
||||
}
|
||||
|
||||
t.Setenv("AI_GATEWAY_PROCESS_ROLE", "api")
|
||||
cfg = Load()
|
||||
if !cfg.RunsPublicHTTP() || cfg.RunsAsyncExecutionWorker() || cfg.RunsBackgroundWorkers() {
|
||||
t.Fatalf("api role capabilities are inconsistent: %+v", cfg)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateProcessRoleAndDatabasePool(t *testing.T) {
|
||||
cfg := Load()
|
||||
cfg.ProcessRole = "invalid"
|
||||
if err := cfg.Validate(); err == nil || !strings.Contains(err.Error(), "PROCESS_ROLE") {
|
||||
t.Fatalf("Validate() error = %v, want invalid process role", err)
|
||||
}
|
||||
cfg.ProcessRole = "api"
|
||||
cfg.DatabaseMaxConns = -1
|
||||
if err := cfg.Validate(); err == nil || !strings.Contains(err.Error(), "DATABASE_MAX_CONNS") {
|
||||
t.Fatalf("Validate() error = %v, want invalid database max conns", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateTaskHistorySettings(t *testing.T) {
|
||||
cfg := Load()
|
||||
cfg.TaskRetentionDays = 30
|
||||
|
||||
Reference in New Issue
Block a user