保留平台模型 RPM、TPM 和并发策略语义,增加 PostgreSQL 集群级租约、饱和候选重选和多平台自动负载,避免突发任务固定等待首个平台。\n\n新增 Worker 实时负载采样、自适应 active/heavy 容量、心跳与管理端指标,并扩展本地 acceptance runner,覆盖三 Worker、同模型三平台 2/4/6 并发和 48 个带图视频突发任务。\n\n验证:go test ./...、go vet ./...、PostgreSQL 跨 Store 集成测试、gofmt、bash -n、ShellCheck 及本地集群 provider-burst 验收通过;48/48 成功,无越限、重复提交、重复计费、重复回调或终态资源泄漏。
57 lines
2.1 KiB
Go
57 lines
2.1 KiB
Go
package store
|
|
|
|
import "testing"
|
|
|
|
func TestAllocateWorkerCapacitiesHonorsInstanceLimits(t *testing.T) {
|
|
workers := []activeWorkerCapacity{
|
|
{InstanceID: "worker-a", CapacityLimit: 24},
|
|
{InstanceID: "worker-b", CapacityLimit: 24},
|
|
}
|
|
allocations, global := allocateWorkerCapacities(workers, 310)
|
|
if global != 48 || allocations["worker-a"] != 24 || allocations["worker-b"] != 24 {
|
|
t.Fatalf("allocations=%v global=%d, want 24/24 and 48", allocations, global)
|
|
}
|
|
}
|
|
|
|
func TestAllocateWorkerCapacitiesBalancesBelowLimits(t *testing.T) {
|
|
workers := []activeWorkerCapacity{
|
|
{InstanceID: "worker-a", CapacityLimit: 24},
|
|
{InstanceID: "worker-b", CapacityLimit: 24},
|
|
}
|
|
allocations, global := allocateWorkerCapacities(workers, 5)
|
|
if global != 5 || allocations["worker-a"] != 3 || allocations["worker-b"] != 2 {
|
|
t.Fatalf("allocations=%v global=%d, want 3/2 and 5", allocations, global)
|
|
}
|
|
}
|
|
|
|
func TestAllocateWorkerCapacitiesKeepsSurvivorBounded(t *testing.T) {
|
|
workers := []activeWorkerCapacity{{InstanceID: "worker-a", CapacityLimit: 24}}
|
|
allocations, global := allocateWorkerCapacities(workers, 310)
|
|
if global != 24 || allocations["worker-a"] != 24 {
|
|
t.Fatalf("allocations=%v global=%d, want survivor capped at 24", allocations, global)
|
|
}
|
|
}
|
|
|
|
func TestAllocateWorkerCapacitiesSupportsUnequalLimits(t *testing.T) {
|
|
workers := []activeWorkerCapacity{
|
|
{InstanceID: "worker-a", CapacityLimit: 1},
|
|
{InstanceID: "worker-b", CapacityLimit: 4},
|
|
}
|
|
allocations, global := allocateWorkerCapacities(workers, 5)
|
|
if global != 5 || allocations["worker-a"] != 1 || allocations["worker-b"] != 4 {
|
|
t.Fatalf("allocations=%v global=%d, want 1/4 and 5", allocations, global)
|
|
}
|
|
}
|
|
|
|
func TestAllocateWorkerCapacitiesRedistributesFromPressuredWorker(t *testing.T) {
|
|
workers := []activeWorkerCapacity{
|
|
{InstanceID: "worker-a", CapacityLimit: 0},
|
|
{InstanceID: "worker-b", CapacityLimit: 6},
|
|
{InstanceID: "worker-c", CapacityLimit: 6},
|
|
}
|
|
allocations, global := allocateWorkerCapacities(workers, 8)
|
|
if global != 8 || allocations["worker-a"] != 0 || allocations["worker-b"] != 4 || allocations["worker-c"] != 4 {
|
|
t.Fatalf("allocations=%v global=%d, want 0/4/4 and 8", allocations, global)
|
|
}
|
|
}
|