From 6197ab23d141cb409618d84b97b5e564747f1c0c Mon Sep 17 00:00:00 2001 From: hzxuzhonghu Date: Fri, 20 Apr 2018 16:33:10 +0800 Subject: [PATCH] EventRateLimit should aggregate reject errors --- plugin/pkg/admission/eventratelimit/BUILD | 1 + plugin/pkg/admission/eventratelimit/admission.go | 12 +++++++++--- plugin/pkg/admission/eventratelimit/limitenforcer.go | 3 +-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugin/pkg/admission/eventratelimit/BUILD b/plugin/pkg/admission/eventratelimit/BUILD index 69f3b3c1f4b..97b33f9bbe3 100644 --- a/plugin/pkg/admission/eventratelimit/BUILD +++ b/plugin/pkg/admission/eventratelimit/BUILD @@ -46,6 +46,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/github.com/hashicorp/golang-lru:go_default_library", diff --git a/plugin/pkg/admission/eventratelimit/admission.go b/plugin/pkg/admission/eventratelimit/admission.go index a255b5743b4..d4880abddc5 100644 --- a/plugin/pkg/admission/eventratelimit/admission.go +++ b/plugin/pkg/admission/eventratelimit/admission.go @@ -19,6 +19,8 @@ package eventratelimit import ( "io" + apierrors "k8s.io/apimachinery/pkg/api/errors" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apiserver/pkg/admission" "k8s.io/client-go/util/flowcontrol" api "k8s.io/kubernetes/pkg/apis/core" @@ -85,13 +87,17 @@ func (a *Plugin) Validate(attr admission.Attributes) (err error) { return nil } - var rejectionError error + var errors []error // give each limit enforcer a chance to reject the event for _, enforcer := range a.limitEnforcers { if err := enforcer.accept(attr); err != nil { - rejectionError = err + errors = append(errors, err) } } - return rejectionError + if aggregatedErr := utilerrors.NewAggregate(errors); aggregatedErr != nil { + return apierrors.NewTooManyRequestsError(aggregatedErr.Error()) + } + + return nil } diff --git a/plugin/pkg/admission/eventratelimit/limitenforcer.go b/plugin/pkg/admission/eventratelimit/limitenforcer.go index 3faff618f01..c65a1715eda 100644 --- a/plugin/pkg/admission/eventratelimit/limitenforcer.go +++ b/plugin/pkg/admission/eventratelimit/limitenforcer.go @@ -22,7 +22,6 @@ import ( "github.com/hashicorp/golang-lru" - apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apiserver/pkg/admission" "k8s.io/client-go/util/flowcontrol" api "k8s.io/kubernetes/pkg/apis/core" @@ -99,7 +98,7 @@ func (enforcer *limitEnforcer) accept(attr admission.Attributes) error { allow := rateLimiter.TryAccept() if !allow { - return apierrors.NewTooManyRequestsError(fmt.Sprintf("limit reached on type %v for key %v", enforcer.limitType, key)) + return fmt.Errorf("limit reached on type %v for key %v", enforcer.limitType, key) } return nil