EventRateLimit should aggregate reject errors

This commit is contained in:
hzxuzhonghu 2018-04-20 16:33:10 +08:00 committed by xuzhonghu
parent 8563443ae6
commit 6197ab23d1
3 changed files with 11 additions and 5 deletions

View File

@ -46,6 +46,7 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_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:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer: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/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library",
"//vendor/github.com/hashicorp/golang-lru:go_default_library", "//vendor/github.com/hashicorp/golang-lru:go_default_library",

View File

@ -19,6 +19,8 @@ package eventratelimit
import ( import (
"io" "io"
apierrors "k8s.io/apimachinery/pkg/api/errors"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/flowcontrol"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
@ -85,13 +87,17 @@ func (a *Plugin) Validate(attr admission.Attributes) (err error) {
return nil return nil
} }
var rejectionError error var errors []error
// give each limit enforcer a chance to reject the event // give each limit enforcer a chance to reject the event
for _, enforcer := range a.limitEnforcers { for _, enforcer := range a.limitEnforcers {
if err := enforcer.accept(attr); err != nil { 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
} }

View File

@ -22,7 +22,6 @@ import (
"github.com/hashicorp/golang-lru" "github.com/hashicorp/golang-lru"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/flowcontrol"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
@ -99,7 +98,7 @@ func (enforcer *limitEnforcer) accept(attr admission.Attributes) error {
allow := rateLimiter.TryAccept() allow := rateLimiter.TryAccept()
if !allow { 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 return nil