fix(acceptance): 按隔离额度执行平台降级路由

让 acceptance 候选负载读取同一 Run ID 下的并发、RPM 和 TPM 计数器,并在单个平台模型额度不足时继续尝试下一候选,生产与 canary 额度作用域保持不变。\n\n补齐本地容量控制器对宁波和香港测试 Worker 的最小 RBAC,避免初次应用生产反亲和配置时发生滚动死锁,并将突发负载对齐到完整限流窗口。\n\n验证:\n- go test ./internal/runner ./internal/store -count=1\n- go vet ./internal/runner ./internal/store\n- bash -n scripts/acceptance/local-cluster.sh scripts/acceptance/provider-burst.sh scripts/acceptance/run-local-acceptance.sh\n- shellcheck -x scripts/acceptance/local-cluster.sh scripts/acceptance/provider-burst.sh scripts/acceptance/run-local-acceptance.sh\n- kubectl apply --dry-run=client -f deploy/kubernetes/local-acceptance/capacity-controller-rbac.yaml
This commit is contained in:
2026-08-03 12:06:09 +08:00
parent 8485f14bc4
commit d740e9f676
7 changed files with 67 additions and 4 deletions
@@ -117,6 +117,19 @@ func TestAcceptanceInfrastructureReservationsIsolateEveryMetric(t *testing.T) {
}
}
func TestAcceptanceQuotaScopePrefixMatchesIsolatedCounters(t *testing.T) {
acceptanceTask := store.GatewayTask{RunMode: "acceptance", AcceptanceRunID: "run-1"}
if got := acceptanceQuotaScopePrefix(acceptanceTask); got != "acceptance:run-1:" {
t.Fatalf("acceptance quota scope prefix=%q", got)
}
if got := acceptanceQuotaScopePrefix(store.GatewayTask{RunMode: "acceptance_canary", AcceptanceRunID: "run-1"}); got != "" {
t.Fatalf("canary must use production quota scope, got %q", got)
}
if got := acceptanceQuotaScopePrefix(store.GatewayTask{RunMode: "production"}); got != "" {
t.Fatalf("production quota scope changed, got %q", got)
}
}
func TestAcceptanceAdmissionScopesLeaveProductionPolicyUnchanged(t *testing.T) {
input := []store.AdmissionScope{{
ScopeType: "platform_model",