From b3d8d79e9aa7a25a38d66dd1ef36b02ed8bf4d84 Mon Sep 17 00:00:00 2001 From: yaqi Date: Thu, 11 Jul 2019 20:34:46 +0800 Subject: [PATCH] add check when qps > 0 but burst <=0 --- .../cmd/client-gen/generators/generator_for_clientset.go | 5 +++++ .../metrics/pkg/client/custom_metrics/versioned_client.go | 3 +++ .../src/k8s.io/metrics/pkg/client/external_metrics/client.go | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go index a1e67dcbdf2..f7254343bd1 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go @@ -134,9 +134,14 @@ func (c *Clientset) Discovery() $.DiscoveryInterface|raw$ { var newClientsetForConfigTemplate = ` // NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. func NewForConfig(c *$.Config|raw$) (*Clientset, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } configShallowCopy.RateLimiter = $.flowcontrolNewTokenBucketRateLimiter|raw$(configShallowCopy.QPS, configShallowCopy.Burst) } var cs Clientset diff --git a/staging/src/k8s.io/metrics/pkg/client/custom_metrics/versioned_client.go b/staging/src/k8s.io/metrics/pkg/client/custom_metrics/versioned_client.go index fae4bf8dc11..bfe9ff2922d 100644 --- a/staging/src/k8s.io/metrics/pkg/client/custom_metrics/versioned_client.go +++ b/staging/src/k8s.io/metrics/pkg/client/custom_metrics/versioned_client.go @@ -56,6 +56,9 @@ func NewForVersion(client rest.Interface, mapper meta.RESTMapper, version schema func NewForVersionForConfig(c *rest.Config, mapper meta.RESTMapper, version schema.GroupVersion) (CustomMetricsClient, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } configShallowCopy.APIPath = "/apis" diff --git a/staging/src/k8s.io/metrics/pkg/client/external_metrics/client.go b/staging/src/k8s.io/metrics/pkg/client/external_metrics/client.go index a6235e02f6a..d6add5c3949 100644 --- a/staging/src/k8s.io/metrics/pkg/client/external_metrics/client.go +++ b/staging/src/k8s.io/metrics/pkg/client/external_metrics/client.go @@ -17,6 +17,8 @@ limitations under the License. package external_metrics import ( + "fmt" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/kubernetes/scheme" @@ -38,6 +40,9 @@ func New(client rest.Interface) ExternalMetricsClient { func NewForConfig(c *rest.Config) (ExternalMetricsClient, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } configShallowCopy.APIPath = "/apis"