From f2f65fe9c440a585d2c3cf389cb253d575bcdc78 Mon Sep 17 00:00:00 2001 From: derekwaynecarr Date: Mon, 18 Jul 2016 15:49:50 -0400 Subject: [PATCH] Improve quota controller performance by eliminating unneeded list calls --- .../resourcequota/resource_quota_controller.go | 4 ++++ .../resource_quota_controller_test.go | 15 --------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/pkg/controller/resourcequota/resource_quota_controller.go b/pkg/controller/resourcequota/resource_quota_controller.go index 91f55be0656..0bb10aab74f 100644 --- a/pkg/controller/resourcequota/resource_quota_controller.go +++ b/pkg/controller/resourcequota/resource_quota_controller.go @@ -270,6 +270,10 @@ func (rq *ResourceQuotaController) syncResourceQuota(resourceQuota api.ResourceQ newUsage := api.ResourceList{} usageStatsOptions := quota.UsageStatsOptions{Namespace: resourceQuota.Namespace, Scopes: resourceQuota.Spec.Scopes} for _, evaluator := range evaluators { + // only trigger the evaluator if it matches a resource in the quota, otherwise, skip calculating anything + if intersection := quota.Intersection(evaluator.MatchesResources(), matchedResources); len(intersection) == 0 { + continue + } stats, err := evaluator.UsageStats(usageStatsOptions) if err != nil { return err diff --git a/pkg/controller/resourcequota/resource_quota_controller_test.go b/pkg/controller/resourcequota/resource_quota_controller_test.go index afee22196c8..7d568eea605 100644 --- a/pkg/controller/resourcequota/resource_quota_controller_test.go +++ b/pkg/controller/resourcequota/resource_quota_controller_test.go @@ -122,12 +122,7 @@ func TestSyncResourceQuota(t *testing.T) { t.Fatalf("Unexpected error %v", err) } expectedActionSet := sets.NewString( - strings.Join([]string{"list", "replicationcontrollers", ""}, "-"), - strings.Join([]string{"list", "services", ""}, "-"), strings.Join([]string{"list", "pods", ""}, "-"), - strings.Join([]string{"list", "resourcequotas", ""}, "-"), - strings.Join([]string{"list", "secrets", ""}, "-"), - strings.Join([]string{"list", "persistentvolumeclaims", ""}, "-"), strings.Join([]string{"update", "resourcequotas", "status"}, "-"), ) actionSet := sets.NewString() @@ -213,12 +208,7 @@ func TestSyncResourceQuotaSpecChange(t *testing.T) { } expectedActionSet := sets.NewString( - strings.Join([]string{"list", "replicationcontrollers", ""}, "-"), - strings.Join([]string{"list", "services", ""}, "-"), strings.Join([]string{"list", "pods", ""}, "-"), - strings.Join([]string{"list", "resourcequotas", ""}, "-"), - strings.Join([]string{"list", "secrets", ""}, "-"), - strings.Join([]string{"list", "persistentvolumeclaims", ""}, "-"), strings.Join([]string{"update", "resourcequotas", "status"}, "-"), ) actionSet := sets.NewString() @@ -293,12 +283,7 @@ func TestSyncResourceQuotaNoChange(t *testing.T) { t.Fatalf("Unexpected error %v", err) } expectedActionSet := sets.NewString( - strings.Join([]string{"list", "replicationcontrollers", ""}, "-"), - strings.Join([]string{"list", "services", ""}, "-"), strings.Join([]string{"list", "pods", ""}, "-"), - strings.Join([]string{"list", "resourcequotas", ""}, "-"), - strings.Join([]string{"list", "secrets", ""}, "-"), - strings.Join([]string{"list", "persistentvolumeclaims", ""}, "-"), ) actionSet := sets.NewString() for _, action := range kubeClient.Actions() {