feat(queue): 增加非文本模型分布式准入队列
使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。 补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。 已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package runner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestRequestExecutionContextCancelsBeforeSubmission(t *testing.T) {
|
||||
requestCtx, cancelRequest := context.WithCancel(context.Background())
|
||||
serverCtx, cancelServer := context.WithCancel(context.Background())
|
||||
defer cancelServer()
|
||||
ctx, cancel := NewRequestExecutionContext(requestCtx, serverCtx)
|
||||
defer cancel()
|
||||
|
||||
cancelRequest()
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("request context did not cancel before upstream submission")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestExecutionContextSurvivesDisconnectAfterSubmission(t *testing.T) {
|
||||
requestCtx, cancelRequest := context.WithCancel(context.Background())
|
||||
serverCtx, cancelServer := context.WithCancel(context.Background())
|
||||
ctx, cancel := NewRequestExecutionContext(requestCtx, serverCtx)
|
||||
defer cancel()
|
||||
|
||||
markUpstreamSubmissionStarted(ctx)
|
||||
cancelRequest()
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
t.Fatal("client disconnect propagated after upstream submission")
|
||||
case <-time.After(50 * time.Millisecond):
|
||||
}
|
||||
|
||||
cancelServer()
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("server shutdown did not cancel detached execution")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestExecutionContextPreservesRequestValues(t *testing.T) {
|
||||
type contextKey struct{}
|
||||
requestCtx := context.WithValue(context.Background(), contextKey{}, "trace-value")
|
||||
ctx, cancel := NewRequestExecutionContext(requestCtx, context.Background())
|
||||
defer cancel()
|
||||
|
||||
if got := ctx.Value(contextKey{}); got != "trace-value" {
|
||||
t.Fatalf("request context value = %v, want trace-value", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user