mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
rename assuredConcurrencyShares for flowcontrol v1beta3
This commit is contained in:
parent
f4f363fbe4
commit
66fc0d7037
10
api/openapi-spec/swagger.json
generated
10
api/openapi-spec/swagger.json
generated
@ -10633,14 +10633,14 @@
|
|||||||
"io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration": {
|
"io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration": {
|
||||||
"description": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"description": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"properties": {
|
"properties": {
|
||||||
"assuredConcurrencyShares": {
|
|
||||||
"description": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) --- the number of requests that may be executing at a time --- for each such priority level:\n\n ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )\n\nbigger numbers of ACS mean more reserved concurrent requests (at the expense of every other PL). This field has a default value of 30.",
|
|
||||||
"format": "int32",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"limitResponse": {
|
"limitResponse": {
|
||||||
"$ref": "#/definitions/io.k8s.api.flowcontrol.v1beta3.LimitResponse",
|
"$ref": "#/definitions/io.k8s.api.flowcontrol.v1beta3.LimitResponse",
|
||||||
"description": "`limitResponse` indicates what to do with requests that can not be executed right now"
|
"description": "`limitResponse` indicates what to do with requests that can not be executed right now"
|
||||||
|
},
|
||||||
|
"nominalConcurrencyShares": {
|
||||||
|
"description": "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats available at this priority level. This is used both for requests dispatched from this priority level as well as requests dispatched from other priority levels borrowing seats from this level. The server's concurrency limit (ServerCL) is divided among the Limited priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[limited priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other Limited priority level. This field has a default value of 30.",
|
||||||
|
"format": "int32",
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
|
@ -255,12 +255,6 @@
|
|||||||
"io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration": {
|
"io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration": {
|
||||||
"description": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"description": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"properties": {
|
"properties": {
|
||||||
"assuredConcurrencyShares": {
|
|
||||||
"default": 0,
|
|
||||||
"description": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) --- the number of requests that may be executing at a time --- for each such priority level:\n\n ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )\n\nbigger numbers of ACS mean more reserved concurrent requests (at the expense of every other PL). This field has a default value of 30.",
|
|
||||||
"format": "int32",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"limitResponse": {
|
"limitResponse": {
|
||||||
"allOf": [
|
"allOf": [
|
||||||
{
|
{
|
||||||
@ -269,6 +263,12 @@
|
|||||||
],
|
],
|
||||||
"default": {},
|
"default": {},
|
||||||
"description": "`limitResponse` indicates what to do with requests that can not be executed right now"
|
"description": "`limitResponse` indicates what to do with requests that can not be executed right now"
|
||||||
|
},
|
||||||
|
"nominalConcurrencyShares": {
|
||||||
|
"default": 0,
|
||||||
|
"description": "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats available at this priority level. This is used both for requests dispatched from this priority level as well as requests dispatched from other priority levels borrowing seats from this level. The server's concurrency limit (ServerCL) is divided among the Limited priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[limited priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other Limited priority level. This field has a default value of 30.",
|
||||||
|
"format": "int32",
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object"
|
"type": "object"
|
||||||
|
@ -396,23 +396,23 @@ const (
|
|||||||
// - How are requests for this priority level limited?
|
// - How are requests for this priority level limited?
|
||||||
// - What should be done with requests that exceed the limit?
|
// - What should be done with requests that exceed the limit?
|
||||||
type LimitedPriorityLevelConfiguration struct {
|
type LimitedPriorityLevelConfiguration struct {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `nominalConcurrencyShares` (NCS) contributes to the computation of the
|
||||||
// limit, which is a limit on the number of requests of this
|
// NominalConcurrencyLimit (NominalCL) of this level.
|
||||||
// priority level that may be executing at a given time. ACS must
|
// This is the number of execution seats available at this priority level.
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// This is used both for requests dispatched from this priority level
|
||||||
// divided among the concurrency-controlled priority levels in
|
// as well as requests dispatched from other priority levels
|
||||||
// proportion to their assured concurrency shares. This produces
|
// borrowing seats from this level.
|
||||||
// the assured concurrency value (ACV) --- the number of requests
|
// The server's concurrency limit (ServerCL) is divided among the
|
||||||
// that may be executing at a time --- for each such priority
|
// Limited priority levels in proportion to their NCS values:
|
||||||
// level:
|
|
||||||
//
|
//
|
||||||
// ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )
|
// NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs )
|
||||||
|
// sum_ncs = sum[limited priority level k] NCS(k)
|
||||||
//
|
//
|
||||||
// bigger numbers of ACS mean more reserved concurrent requests (at the
|
// Bigger numbers mean a larger nominal concurrency limit,
|
||||||
// expense of every other PL).
|
// at the expense of every other Limited priority level.
|
||||||
// This field has a default value of 30.
|
// This field has a default value of 30.
|
||||||
// +optional
|
// +optional
|
||||||
AssuredConcurrencyShares int32
|
NominalConcurrencyShares int32
|
||||||
|
|
||||||
// `limitResponse` indicates what to do with requests that can not be executed right now
|
// `limitResponse` indicates what to do with requests that can not be executed right now
|
||||||
LimitResponse LimitResponse
|
LimitResponse LimitResponse
|
||||||
|
45
pkg/apis/flowcontrol/v1alpha1/conversion.go
Normal file
45
pkg/apis/flowcontrol/v1alpha1/conversion.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/api/flowcontrol/v1alpha1"
|
||||||
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1alpha1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.NominalConcurrencyShares = in.AssuredConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1alpha1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.AssuredConcurrencyShares = in.NominalConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
97
pkg/apis/flowcontrol/v1alpha1/conversion_test.go
Normal file
97
pkg/apis/flowcontrol/v1alpha1/conversion_test.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"k8s.io/api/flowcontrol/v1alpha1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConvert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *v1alpha1.LimitedPriorityLevelConfiguration
|
||||||
|
expected *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "nominal concurrency shares is set as expected",
|
||||||
|
in: &v1alpha1.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1alpha1.LimitResponse{
|
||||||
|
Type: v1alpha1.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &flowcontrol.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
expected *v1alpha1.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "assured concurrency shares is set as expected",
|
||||||
|
in: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &v1alpha1.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1alpha1.LimitResponse{
|
||||||
|
Type: v1alpha1.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &v1alpha1.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -117,16 +117,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.AddGeneratedConversionFunc((*v1alpha1.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1alpha1.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1alpha1.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1alpha1.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*v1alpha1.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddGeneratedConversionFunc((*v1alpha1.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1alpha1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1alpha1.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
return Convert_v1alpha1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1alpha1.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -257,6 +247,16 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := s.AddConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1alpha1.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1alpha1.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.AddConversionFunc((*v1alpha1.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1alpha1.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,31 +455,21 @@ func Convert_flowcontrol_LimitResponse_To_v1alpha1_LimitResponse(in *flowcontrol
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1alpha1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1alpha1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.AssuredConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_v1alpha1_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_v1alpha1_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1alpha1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1alpha1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1alpha1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.NominalConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_flowcontrol_LimitResponse_To_v1alpha1_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_flowcontrol_LimitResponse_To_v1alpha1_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1alpha1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_v1alpha1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1alpha1.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
func autoConvert_v1alpha1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1alpha1.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
||||||
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
||||||
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
||||||
@ -588,7 +578,17 @@ func Convert_flowcontrol_PriorityLevelConfigurationCondition_To_v1alpha1_Priorit
|
|||||||
|
|
||||||
func autoConvert_v1alpha1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1alpha1.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_v1alpha1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1alpha1.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]flowcontrol.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]flowcontrol.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_v1alpha1_PriorityLevelConfiguration_To_flowcontrol_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,7 +599,17 @@ func Convert_v1alpha1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLeve
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1alpha1_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1alpha1.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1alpha1_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1alpha1.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]v1alpha1.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]v1alpha1.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_flowcontrol_PriorityLevelConfiguration_To_v1alpha1_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,7 +640,15 @@ func Convert_flowcontrol_PriorityLevelConfigurationReference_To_v1alpha1_Priorit
|
|||||||
|
|
||||||
func autoConvert_v1alpha1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1alpha1.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_v1alpha1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1alpha1.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*flowcontrol.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(flowcontrol.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_v1alpha1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +659,15 @@ func Convert_v1alpha1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLeve
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1alpha1_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1alpha1.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1alpha1_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1alpha1.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = v1alpha1.PriorityLevelEnablement(in.Type)
|
out.Type = v1alpha1.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*v1alpha1.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(v1alpha1.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1alpha1_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
pkg/apis/flowcontrol/v1beta1/conversion.go
Normal file
45
pkg/apis/flowcontrol/v1beta1/conversion.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/api/flowcontrol/v1beta1"
|
||||||
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.NominalConcurrencyShares = in.AssuredConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.AssuredConcurrencyShares = in.NominalConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
97
pkg/apis/flowcontrol/v1beta1/conversion_test.go
Normal file
97
pkg/apis/flowcontrol/v1beta1/conversion_test.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1beta1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"k8s.io/api/flowcontrol/v1beta1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConvert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *v1beta1.LimitedPriorityLevelConfiguration
|
||||||
|
expected *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "nominal concurrency shares is set as expected",
|
||||||
|
in: &v1beta1.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1beta1.LimitResponse{
|
||||||
|
Type: v1beta1.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &flowcontrol.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
expected *v1beta1.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "assured concurrency shares is set as expected",
|
||||||
|
in: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &v1beta1.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1beta1.LimitResponse{
|
||||||
|
Type: v1beta1.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &v1beta1.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -117,16 +117,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta1.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1beta1.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1beta1.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1beta1.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta1.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddGeneratedConversionFunc((*v1beta1.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1beta1.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
return Convert_v1beta1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1beta1.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -257,6 +247,16 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := s.AddConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1beta1.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1beta1.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.AddConversionFunc((*v1beta1.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1beta1.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,31 +455,21 @@ func Convert_flowcontrol_LimitResponse_To_v1beta1_LimitResponse(in *flowcontrol.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.AssuredConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_v1beta1_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_v1beta1_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta1.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.NominalConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_flowcontrol_LimitResponse_To_v1beta1_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_flowcontrol_LimitResponse_To_v1beta1_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta1.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_v1beta1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1beta1.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
func autoConvert_v1beta1_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1beta1.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
||||||
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
||||||
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
||||||
@ -588,7 +578,17 @@ func Convert_flowcontrol_PriorityLevelConfigurationCondition_To_v1beta1_Priority
|
|||||||
|
|
||||||
func autoConvert_v1beta1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1beta1.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_v1beta1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1beta1.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]flowcontrol.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]flowcontrol.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_v1beta1_PriorityLevelConfiguration_To_flowcontrol_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,7 +599,17 @@ func Convert_v1beta1_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevel
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1beta1_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1beta1.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1beta1_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1beta1.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]v1beta1.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]v1beta1.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_flowcontrol_PriorityLevelConfiguration_To_v1beta1_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,7 +640,15 @@ func Convert_flowcontrol_PriorityLevelConfigurationReference_To_v1beta1_Priority
|
|||||||
|
|
||||||
func autoConvert_v1beta1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1beta1.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_v1beta1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1beta1.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*flowcontrol.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(flowcontrol.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_v1beta1_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +659,15 @@ func Convert_v1beta1_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevel
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1beta1_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1beta1.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1beta1_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1beta1.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = v1beta1.PriorityLevelEnablement(in.Type)
|
out.Type = v1beta1.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*v1beta1.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(v1beta1.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta1_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
pkg/apis/flowcontrol/v1beta2/conversion.go
Normal file
45
pkg/apis/flowcontrol/v1beta2/conversion.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1beta2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/api/flowcontrol/v1beta2"
|
||||||
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta2.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.NominalConcurrencyShares = in.AssuredConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has been
|
||||||
|
// renamed to NominalConcurrencyShares in v1beta3.
|
||||||
|
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta2.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
|
if err := autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in, out, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.AssuredConcurrencyShares = in.NominalConcurrencyShares
|
||||||
|
return nil
|
||||||
|
}
|
97
pkg/apis/flowcontrol/v1beta2/conversion_test.go
Normal file
97
pkg/apis/flowcontrol/v1beta2/conversion_test.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package v1beta2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"k8s.io/api/flowcontrol/v1beta2"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConvert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *v1beta2.LimitedPriorityLevelConfiguration
|
||||||
|
expected *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "nominal concurrency shares is set as expected",
|
||||||
|
in: &v1beta2.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1beta2.LimitResponse{
|
||||||
|
Type: v1beta2.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &flowcontrol.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in *flowcontrol.LimitedPriorityLevelConfiguration
|
||||||
|
expected *v1beta2.LimitedPriorityLevelConfiguration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "assured concurrency shares is set as expected",
|
||||||
|
in: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: 100,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &v1beta2.LimitedPriorityLevelConfiguration{
|
||||||
|
AssuredConcurrencyShares: 100,
|
||||||
|
LimitResponse: v1beta2.LimitResponse{
|
||||||
|
Type: v1beta2.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
out := &v1beta2.LimitedPriorityLevelConfiguration{}
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(test.in, out, nil); err != nil {
|
||||||
|
t.Errorf("Expected no error, but got: %v", err)
|
||||||
|
}
|
||||||
|
if !cmp.Equal(test.expected, out) {
|
||||||
|
t.Errorf("Expected a match, diff: %s", cmp.Diff(test.expected, out))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -117,16 +117,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta2.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1beta2.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1beta2.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1beta2.LimitedPriorityLevelConfiguration), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta2.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddGeneratedConversionFunc((*v1beta2.NonResourcePolicyRule)(nil), (*flowcontrol.NonResourcePolicyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta2_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1beta2.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
return Convert_v1beta2_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(a.(*v1beta2.NonResourcePolicyRule), b.(*flowcontrol.NonResourcePolicyRule), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -257,6 +247,16 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := s.AddConversionFunc((*flowcontrol.LimitedPriorityLevelConfiguration)(nil), (*v1beta2.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(a.(*flowcontrol.LimitedPriorityLevelConfiguration), b.(*v1beta2.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.AddConversionFunc((*v1beta2.LimitedPriorityLevelConfiguration)(nil), (*flowcontrol.LimitedPriorityLevelConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(a.(*v1beta2.LimitedPriorityLevelConfiguration), b.(*flowcontrol.LimitedPriorityLevelConfiguration), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,31 +455,21 @@ func Convert_flowcontrol_LimitResponse_To_v1beta2_LimitResponse(in *flowcontrol.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta2.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta2.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.AssuredConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_v1beta2_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_v1beta2_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta2.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta2.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta2.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
// WARNING: in.NominalConcurrencyShares requires manual conversion: does not exist in peer-type
|
||||||
if err := Convert_flowcontrol_LimitResponse_To_v1beta2_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_flowcontrol_LimitResponse_To_v1beta2_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration is an autogenerated conversion function.
|
|
||||||
func Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta2.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
|
||||||
return autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_v1beta2_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1beta2.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
func autoConvert_v1beta2_NonResourcePolicyRule_To_flowcontrol_NonResourcePolicyRule(in *v1beta2.NonResourcePolicyRule, out *flowcontrol.NonResourcePolicyRule, s conversion.Scope) error {
|
||||||
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
out.Verbs = *(*[]string)(unsafe.Pointer(&in.Verbs))
|
||||||
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
out.NonResourceURLs = *(*[]string)(unsafe.Pointer(&in.NonResourceURLs))
|
||||||
@ -588,7 +578,17 @@ func Convert_flowcontrol_PriorityLevelConfigurationCondition_To_v1beta2_Priority
|
|||||||
|
|
||||||
func autoConvert_v1beta2_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1beta2.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_v1beta2_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevelConfigurationList(in *v1beta2.PriorityLevelConfigurationList, out *flowcontrol.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]flowcontrol.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]flowcontrol.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_v1beta2_PriorityLevelConfiguration_To_flowcontrol_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,7 +599,17 @@ func Convert_v1beta2_PriorityLevelConfigurationList_To_flowcontrol_PriorityLevel
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1beta2_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1beta2.PriorityLevelConfigurationList, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationList_To_v1beta2_PriorityLevelConfigurationList(in *flowcontrol.PriorityLevelConfigurationList, out *v1beta2.PriorityLevelConfigurationList, s conversion.Scope) error {
|
||||||
out.ListMeta = in.ListMeta
|
out.ListMeta = in.ListMeta
|
||||||
out.Items = *(*[]v1beta2.PriorityLevelConfiguration)(unsafe.Pointer(&in.Items))
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]v1beta2.PriorityLevelConfiguration, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
if err := Convert_flowcontrol_PriorityLevelConfiguration_To_v1beta2_PriorityLevelConfiguration(&(*in)[i], &(*out)[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Items = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,7 +640,15 @@ func Convert_flowcontrol_PriorityLevelConfigurationReference_To_v1beta2_Priority
|
|||||||
|
|
||||||
func autoConvert_v1beta2_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1beta2.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_v1beta2_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevelConfigurationSpec(in *v1beta2.PriorityLevelConfigurationSpec, out *flowcontrol.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
out.Type = flowcontrol.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*flowcontrol.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(flowcontrol.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_v1beta2_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +659,15 @@ func Convert_v1beta2_PriorityLevelConfigurationSpec_To_flowcontrol_PriorityLevel
|
|||||||
|
|
||||||
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1beta2_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1beta2.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
func autoConvert_flowcontrol_PriorityLevelConfigurationSpec_To_v1beta2_PriorityLevelConfigurationSpec(in *flowcontrol.PriorityLevelConfigurationSpec, out *v1beta2.PriorityLevelConfigurationSpec, s conversion.Scope) error {
|
||||||
out.Type = v1beta2.PriorityLevelEnablement(in.Type)
|
out.Type = v1beta2.PriorityLevelEnablement(in.Type)
|
||||||
out.Limited = (*v1beta2.LimitedPriorityLevelConfiguration)(unsafe.Pointer(in.Limited))
|
if in.Limited != nil {
|
||||||
|
in, out := &in.Limited, &out.Limited
|
||||||
|
*out = new(v1beta2.LimitedPriorityLevelConfiguration)
|
||||||
|
if err := Convert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta2_LimitedPriorityLevelConfiguration(*in, *out, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Limited = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ const (
|
|||||||
PriorityLevelConfigurationDefaultHandSize int32 = 8
|
PriorityLevelConfigurationDefaultHandSize int32 = 8
|
||||||
PriorityLevelConfigurationDefaultQueues int32 = 64
|
PriorityLevelConfigurationDefaultQueues int32 = 64
|
||||||
PriorityLevelConfigurationDefaultQueueLengthLimit int32 = 50
|
PriorityLevelConfigurationDefaultQueueLengthLimit int32 = 50
|
||||||
PriorityLevelConfigurationDefaultAssuredConcurrencyShares int32 = 30
|
PriorityLevelConfigurationDefaultNominalConcurrencyShares int32 = 30
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetDefaults_FlowSchema sets default values for flow schema
|
// SetDefaults_FlowSchema sets default values for flow schema
|
||||||
@ -41,8 +41,8 @@ func SetDefaults_FlowSchemaSpec(spec *v1beta3.FlowSchemaSpec) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SetDefaults_LimitedPriorityLevelConfiguration(lplc *v1beta3.LimitedPriorityLevelConfiguration) {
|
func SetDefaults_LimitedPriorityLevelConfiguration(lplc *v1beta3.LimitedPriorityLevelConfiguration) {
|
||||||
if lplc.AssuredConcurrencyShares == 0 {
|
if lplc.NominalConcurrencyShares == 0 {
|
||||||
lplc.AssuredConcurrencyShares = PriorityLevelConfigurationDefaultAssuredConcurrencyShares
|
lplc.NominalConcurrencyShares = PriorityLevelConfigurationDefaultNominalConcurrencyShares
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ func Convert_flowcontrol_LimitResponse_To_v1beta3_LimitResponse(in *flowcontrol.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1beta3_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta3.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_v1beta3_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPriorityLevelConfiguration(in *v1beta3.LimitedPriorityLevelConfiguration, out *flowcontrol.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
out.NominalConcurrencyShares = in.NominalConcurrencyShares
|
||||||
if err := Convert_v1beta3_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_v1beta3_LimitResponse_To_flowcontrol_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -468,7 +468,7 @@ func Convert_v1beta3_LimitedPriorityLevelConfiguration_To_flowcontrol_LimitedPri
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta3_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta3.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
func autoConvert_flowcontrol_LimitedPriorityLevelConfiguration_To_v1beta3_LimitedPriorityLevelConfiguration(in *flowcontrol.LimitedPriorityLevelConfiguration, out *v1beta3.LimitedPriorityLevelConfiguration, s conversion.Scope) error {
|
||||||
out.AssuredConcurrencyShares = in.AssuredConcurrencyShares
|
out.NominalConcurrencyShares = in.NominalConcurrencyShares
|
||||||
if err := Convert_flowcontrol_LimitResponse_To_v1beta3_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
if err := Convert_flowcontrol_LimitResponse_To_v1beta3_LimitResponse(&in.LimitResponse, &out.LimitResponse, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1"
|
||||||
|
flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
|
||||||
|
flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation"
|
apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||||
"k8s.io/apiserver/pkg/util/shufflesharding"
|
"k8s.io/apiserver/pkg/util/shufflesharding"
|
||||||
@ -337,10 +341,10 @@ func ValidateFlowSchemaCondition(condition *flowcontrol.FlowSchemaCondition, fld
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ValidatePriorityLevelConfiguration validates priority-level-configuration.
|
// ValidatePriorityLevelConfiguration validates priority-level-configuration.
|
||||||
func ValidatePriorityLevelConfiguration(pl *flowcontrol.PriorityLevelConfiguration) field.ErrorList {
|
func ValidatePriorityLevelConfiguration(pl *flowcontrol.PriorityLevelConfiguration, requestGV schema.GroupVersion) field.ErrorList {
|
||||||
allErrs := apivalidation.ValidateObjectMeta(&pl.ObjectMeta, false, ValidatePriorityLevelConfigurationName, field.NewPath("metadata"))
|
allErrs := apivalidation.ValidateObjectMeta(&pl.ObjectMeta, false, ValidatePriorityLevelConfigurationName, field.NewPath("metadata"))
|
||||||
specPath := field.NewPath("spec")
|
specPath := field.NewPath("spec")
|
||||||
allErrs = append(allErrs, ValidatePriorityLevelConfigurationSpec(&pl.Spec, pl.Name, specPath)...)
|
allErrs = append(allErrs, ValidatePriorityLevelConfigurationSpec(&pl.Spec, requestGV, pl.Name, specPath)...)
|
||||||
if mand, ok := internalbootstrap.MandatoryPriorityLevelConfigurations[pl.Name]; ok {
|
if mand, ok := internalbootstrap.MandatoryPriorityLevelConfigurations[pl.Name]; ok {
|
||||||
// Check for almost exact equality. This is a pretty
|
// Check for almost exact equality. This is a pretty
|
||||||
// strict test, and it is OK in this context because both
|
// strict test, and it is OK in this context because both
|
||||||
@ -354,13 +358,8 @@ func ValidatePriorityLevelConfiguration(pl *flowcontrol.PriorityLevelConfigurati
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidatePriorityLevelConfigurationUpdate validates the update of priority-level-configuration.
|
|
||||||
func ValidatePriorityLevelConfigurationUpdate(old, pl *flowcontrol.PriorityLevelConfiguration) field.ErrorList {
|
|
||||||
return ValidatePriorityLevelConfiguration(pl)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidatePriorityLevelConfigurationSpec validates priority-level-configuration's spec.
|
// ValidatePriorityLevelConfigurationSpec validates priority-level-configuration's spec.
|
||||||
func ValidatePriorityLevelConfigurationSpec(spec *flowcontrol.PriorityLevelConfigurationSpec, name string, fldPath *field.Path) field.ErrorList {
|
func ValidatePriorityLevelConfigurationSpec(spec *flowcontrol.PriorityLevelConfigurationSpec, requestGV schema.GroupVersion, name string, fldPath *field.Path) field.ErrorList {
|
||||||
var allErrs field.ErrorList
|
var allErrs field.ErrorList
|
||||||
if (name == flowcontrol.PriorityLevelConfigurationNameExempt) != (spec.Type == flowcontrol.PriorityLevelEnablementExempt) {
|
if (name == flowcontrol.PriorityLevelConfigurationNameExempt) != (spec.Type == flowcontrol.PriorityLevelEnablementExempt) {
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("type"), spec.Type, "type must be 'Exempt' if and only if name is 'exempt'"))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("type"), spec.Type, "type must be 'Exempt' if and only if name is 'exempt'"))
|
||||||
@ -374,7 +373,7 @@ func ValidatePriorityLevelConfigurationSpec(spec *flowcontrol.PriorityLevelConfi
|
|||||||
if spec.Limited == nil {
|
if spec.Limited == nil {
|
||||||
allErrs = append(allErrs, field.Required(fldPath.Child("limited"), "must not be empty when type is Limited"))
|
allErrs = append(allErrs, field.Required(fldPath.Child("limited"), "must not be empty when type is Limited"))
|
||||||
} else {
|
} else {
|
||||||
allErrs = append(allErrs, ValidateLimitedPriorityLevelConfiguration(spec.Limited, fldPath.Child("limited"))...)
|
allErrs = append(allErrs, ValidateLimitedPriorityLevelConfiguration(spec.Limited, requestGV, fldPath.Child("limited"))...)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
allErrs = append(allErrs, field.NotSupported(fldPath.Child("type"), spec.Type, supportedPriorityLevelEnablement.List()))
|
allErrs = append(allErrs, field.NotSupported(fldPath.Child("type"), spec.Type, supportedPriorityLevelEnablement.List()))
|
||||||
@ -383,15 +382,26 @@ func ValidatePriorityLevelConfigurationSpec(spec *flowcontrol.PriorityLevelConfi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ValidateLimitedPriorityLevelConfiguration validates the configuration for an execution-limited priority level
|
// ValidateLimitedPriorityLevelConfiguration validates the configuration for an execution-limited priority level
|
||||||
func ValidateLimitedPriorityLevelConfiguration(lplc *flowcontrol.LimitedPriorityLevelConfiguration, fldPath *field.Path) field.ErrorList {
|
func ValidateLimitedPriorityLevelConfiguration(lplc *flowcontrol.LimitedPriorityLevelConfiguration, requestGV schema.GroupVersion, fldPath *field.Path) field.ErrorList {
|
||||||
var allErrs field.ErrorList
|
var allErrs field.ErrorList
|
||||||
if lplc.AssuredConcurrencyShares <= 0 {
|
if lplc.NominalConcurrencyShares <= 0 {
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("assuredConcurrencyShares"), lplc.AssuredConcurrencyShares, "must be positive"))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child(getVersionedFieldNameForConcurrencyShares(requestGV)), lplc.NominalConcurrencyShares, "must be positive"))
|
||||||
}
|
}
|
||||||
allErrs = append(allErrs, ValidateLimitResponse(lplc.LimitResponse, fldPath.Child("limitResponse"))...)
|
allErrs = append(allErrs, ValidateLimitResponse(lplc.LimitResponse, fldPath.Child("limitResponse"))...)
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getVersionedFieldNameForConcurrencyShares(requestGV schema.GroupVersion) string {
|
||||||
|
switch {
|
||||||
|
case requestGV == flowcontrolv1alpha1.SchemeGroupVersion ||
|
||||||
|
requestGV == flowcontrolv1beta1.SchemeGroupVersion ||
|
||||||
|
requestGV == flowcontrolv1beta2.SchemeGroupVersion:
|
||||||
|
return "assuredConcurrencyShares"
|
||||||
|
default:
|
||||||
|
return "nominalConcurrencyShares"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ValidateLimitResponse validates a LimitResponse
|
// ValidateLimitResponse validates a LimitResponse
|
||||||
func ValidateLimitResponse(lr flowcontrol.LimitResponse, fldPath *field.Path) field.ErrorList {
|
func ValidateLimitResponse(lr flowcontrol.LimitResponse, fldPath *field.Path) field.ErrorList {
|
||||||
var allErrs field.ErrorList
|
var allErrs field.ErrorList
|
||||||
|
@ -22,7 +22,12 @@ import (
|
|||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1"
|
||||||
|
flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
|
||||||
|
flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
|
||||||
|
flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||||
"k8s.io/apiserver/pkg/authentication/user"
|
"k8s.io/apiserver/pkg/authentication/user"
|
||||||
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
@ -910,7 +915,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
badSpec := flowcontrol.PriorityLevelConfigurationSpec{
|
badSpec := flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 42,
|
NominalConcurrencyShares: 42,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject},
|
Type: flowcontrol.LimitResponseTypeReject},
|
||||||
},
|
},
|
||||||
@ -966,7 +971,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 42,
|
NominalConcurrencyShares: 42,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject},
|
Type: flowcontrol.LimitResponseTypeReject},
|
||||||
},
|
},
|
||||||
@ -983,7 +988,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1013,7 +1018,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 5,
|
NominalConcurrencyShares: 5,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
}}},
|
}}},
|
||||||
@ -1029,7 +1034,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
}}},
|
}}},
|
||||||
@ -1045,7 +1050,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1065,7 +1070,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1087,7 +1092,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1109,7 +1114,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1132,7 +1137,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1152,7 +1157,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -1168,7 +1173,7 @@ func TestPriorityLevelConfigurationValidation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
errs := ValidatePriorityLevelConfiguration(testCase.priorityLevelConfiguration)
|
errs := ValidatePriorityLevelConfiguration(testCase.priorityLevelConfiguration, flowcontrolv1beta3.SchemeGroupVersion)
|
||||||
if !assert.ElementsMatch(t, testCase.expectedErrors, errs) {
|
if !assert.ElementsMatch(t, testCase.expectedErrors, errs) {
|
||||||
t.Logf("mismatch: %v", cmp.Diff(testCase.expectedErrors, errs))
|
t.Logf("mismatch: %v", cmp.Diff(testCase.expectedErrors, errs))
|
||||||
}
|
}
|
||||||
@ -1358,3 +1363,74 @@ func TestValidateNonResourceURLPath(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateLimitedPriorityLevelConfiguration(t *testing.T) {
|
||||||
|
errExpectedFn := func(fieldName string) field.ErrorList {
|
||||||
|
return field.ErrorList{
|
||||||
|
field.Invalid(field.NewPath("spec").Child("limited").Child(fieldName), int32(0), "must be positive"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
requestVersion schema.GroupVersion
|
||||||
|
concurrencyShares int32
|
||||||
|
errExpected field.ErrorList
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
requestVersion: flowcontrolv1alpha1.SchemeGroupVersion,
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("assuredConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
requestVersion: flowcontrolv1beta1.SchemeGroupVersion,
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("assuredConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
requestVersion: flowcontrolv1beta2.SchemeGroupVersion,
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("assuredConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
requestVersion: flowcontrolv1beta3.SchemeGroupVersion,
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("nominalConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// let's simulate a post v1beta3 version, we expect the
|
||||||
|
// error to return the new field introduced in v1beta3.
|
||||||
|
requestVersion: schema.GroupVersion{Group: flowcontrolv1beta3.GroupName, Version: "v1"},
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("nominalConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// this should never really happen in real life, the request
|
||||||
|
// context should always contain the request {group, version}
|
||||||
|
requestVersion: schema.GroupVersion{},
|
||||||
|
concurrencyShares: 0,
|
||||||
|
errExpected: errExpectedFn("nominalConcurrencyShares"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
requestVersion: flowcontrolv1beta3.SchemeGroupVersion,
|
||||||
|
concurrencyShares: 100,
|
||||||
|
errExpected: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.requestVersion.String(), func(t *testing.T) {
|
||||||
|
configuration := &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
|
NominalConcurrencyShares: test.concurrencyShares,
|
||||||
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
specPath := field.NewPath("spec").Child("limited")
|
||||||
|
|
||||||
|
errGot := ValidateLimitedPriorityLevelConfiguration(configuration, test.requestVersion, specPath)
|
||||||
|
if !cmp.Equal(test.errExpected, errGot) {
|
||||||
|
t.Errorf("Expected error: %v, diff: %s", test.errExpected, cmp.Diff(test.errExpected, errGot))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
4
pkg/generated/openapi/zz_generated.openapi.go
generated
4
pkg/generated/openapi/zz_generated.openapi.go
generated
@ -33599,9 +33599,9 @@ func schema_k8sio_api_flowcontrol_v1beta3_LimitedPriorityLevelConfiguration(ref
|
|||||||
Description: "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
Description: "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
Type: []string{"object"},
|
Type: []string{"object"},
|
||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"assuredConcurrencyShares": {
|
"nominalConcurrencyShares": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) --- the number of requests that may be executing at a time --- for each such priority level:\n\n ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )\n\nbigger numbers of ACS mean more reserved concurrent requests (at the expense of every other PL). This field has a default value of 30.",
|
Description: "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats available at this priority level. This is used both for requests dispatched from this priority level as well as requests dispatched from other priority levels borrowing seats from this level. The server's concurrency limit (ServerCL) is divided among the Limited priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[limited priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other Limited priority level. This field has a default value of 30.",
|
||||||
Default: 0,
|
Default: 0,
|
||||||
Type: []string{"integer"},
|
Type: []string{"integer"},
|
||||||
Format: "int32",
|
Format: "int32",
|
||||||
|
@ -567,7 +567,7 @@ func AddHandlers(h printers.PrintHandler) {
|
|||||||
priorityLevelColumnDefinitions := []metav1.TableColumnDefinition{
|
priorityLevelColumnDefinitions := []metav1.TableColumnDefinition{
|
||||||
{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
|
{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
|
||||||
{Name: "Type", Type: "string", Description: flowcontrolv1beta3.PriorityLevelConfigurationSpec{}.SwaggerDoc()["type"]},
|
{Name: "Type", Type: "string", Description: flowcontrolv1beta3.PriorityLevelConfigurationSpec{}.SwaggerDoc()["type"]},
|
||||||
{Name: "AssuredConcurrencyShares", Type: "string", Description: flowcontrolv1beta3.LimitedPriorityLevelConfiguration{}.SwaggerDoc()["assuredConcurrencyShares"]},
|
{Name: "NominalConcurrencyShares", Type: "string", Description: flowcontrolv1beta3.LimitedPriorityLevelConfiguration{}.SwaggerDoc()["nominalConcurrencyShares"]},
|
||||||
{Name: "Queues", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["queues"]},
|
{Name: "Queues", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["queues"]},
|
||||||
{Name: "HandSize", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["handSize"]},
|
{Name: "HandSize", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["handSize"]},
|
||||||
{Name: "QueueLengthLimit", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["queueLengthLimit"]},
|
{Name: "QueueLengthLimit", Type: "string", Description: flowcontrolv1beta3.QueuingConfiguration{}.SwaggerDoc()["queueLengthLimit"]},
|
||||||
@ -2608,19 +2608,19 @@ func printPriorityLevelConfiguration(obj *flowcontrol.PriorityLevelConfiguration
|
|||||||
Object: runtime.RawExtension{Object: obj},
|
Object: runtime.RawExtension{Object: obj},
|
||||||
}
|
}
|
||||||
name := obj.Name
|
name := obj.Name
|
||||||
acs := interface{}("<none>")
|
ncs := interface{}("<none>")
|
||||||
queues := interface{}("<none>")
|
queues := interface{}("<none>")
|
||||||
handSize := interface{}("<none>")
|
handSize := interface{}("<none>")
|
||||||
queueLengthLimit := interface{}("<none>")
|
queueLengthLimit := interface{}("<none>")
|
||||||
if obj.Spec.Limited != nil {
|
if obj.Spec.Limited != nil {
|
||||||
acs = obj.Spec.Limited.AssuredConcurrencyShares
|
ncs = obj.Spec.Limited.NominalConcurrencyShares
|
||||||
if qc := obj.Spec.Limited.LimitResponse.Queuing; qc != nil {
|
if qc := obj.Spec.Limited.LimitResponse.Queuing; qc != nil {
|
||||||
queues = qc.Queues
|
queues = qc.Queues
|
||||||
handSize = qc.HandSize
|
handSize = qc.HandSize
|
||||||
queueLengthLimit = qc.QueueLengthLimit
|
queueLengthLimit = qc.QueueLengthLimit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
row.Cells = append(row.Cells, name, string(obj.Spec.Type), acs, queues, handSize, queueLengthLimit, translateTimestampSince(obj.CreationTimestamp))
|
row.Cells = append(row.Cells, name, string(obj.Spec.Type), ncs, queues, handSize, queueLengthLimit, translateTimestampSince(obj.CreationTimestamp))
|
||||||
|
|
||||||
return []metav1.TableRow{row}, nil
|
return []metav1.TableRow{row}, nil
|
||||||
}
|
}
|
||||||
|
@ -5643,7 +5643,7 @@ func TestPrintPriorityLevelConfiguration(t *testing.T) {
|
|||||||
Type: flowcontrol.PriorityLevelEnablementExempt,
|
Type: flowcontrol.PriorityLevelEnablementExempt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Columns: Name, Type, AssuredConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
// Columns: Name, Type, NominalConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
||||||
expected: []metav1.TableRow{{Cells: []interface{}{"unlimited", "Exempt", "<none>", "<none>", "<none>", "<none>", "0s"}}},
|
expected: []metav1.TableRow{{Cells: []interface{}{"unlimited", "Exempt", "<none>", "<none>", "<none>", "<none>", "0s"}}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -5655,14 +5655,14 @@ func TestPrintPriorityLevelConfiguration(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 47,
|
NominalConcurrencyShares: 47,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Columns: Name, Type, AssuredConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
// Columns: Name, Type, NominalConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
||||||
expected: []metav1.TableRow{{Cells: []interface{}{"unqueued", "Limited", int32(47), "<none>", "<none>", "<none>", "0s"}}},
|
expected: []metav1.TableRow{{Cells: []interface{}{"unqueued", "Limited", int32(47), "<none>", "<none>", "<none>", "0s"}}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -5674,7 +5674,7 @@ func TestPrintPriorityLevelConfiguration(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 42,
|
NominalConcurrencyShares: 42,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -5686,7 +5686,7 @@ func TestPrintPriorityLevelConfiguration(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Columns: Name, Type, AssuredConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
// Columns: Name, Type, NominalConcurrencyShares, Queues, HandSize, QueueLengthLimit, Age
|
||||||
expected: []metav1.TableRow{{Cells: []interface{}{"queued", "Limited", int32(42), int32(8), int32(3), int32(4), "0s"}}},
|
expected: []metav1.TableRow{{Cells: []interface{}{"queued", "Limited", int32(42), int32(8), int32(3), int32(4), "0s"}}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -248,7 +248,7 @@ func TestPriorityLevelSpecChanged(t *testing.T) {
|
|||||||
Spec: flowcontrolv1beta3.PriorityLevelConfigurationSpec{
|
Spec: flowcontrolv1beta3.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrolv1beta3.PriorityLevelEnablementLimited,
|
Type: flowcontrolv1beta3.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 1,
|
NominalConcurrencyShares: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ func TestPriorityLevelSpecChanged(t *testing.T) {
|
|||||||
Spec: flowcontrolv1beta3.PriorityLevelConfigurationSpec{
|
Spec: flowcontrolv1beta3.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrolv1beta3.PriorityLevelEnablementLimited,
|
Type: flowcontrolv1beta3.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: flowcontrolapisv1beta3.PriorityLevelConfigurationDefaultAssuredConcurrencyShares,
|
NominalConcurrencyShares: flowcontrolapisv1beta3.PriorityLevelConfigurationDefaultNominalConcurrencyShares,
|
||||||
LimitResponse: flowcontrolv1beta3.LimitResponse{
|
LimitResponse: flowcontrolv1beta3.LimitResponse{
|
||||||
Type: flowcontrolv1beta3.LimitResponseTypeReject,
|
Type: flowcontrolv1beta3.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
@ -468,10 +468,10 @@ func (b *plBuilder) WithAutoUpdateAnnotation(value string) *plBuilder {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *plBuilder) WithLimited(assuredConcurrencyShares int32) *plBuilder {
|
func (b *plBuilder) WithLimited(nominalConcurrencyShares int32) *plBuilder {
|
||||||
b.object.Spec.Type = flowcontrolv1beta3.PriorityLevelEnablementLimited
|
b.object.Spec.Type = flowcontrolv1beta3.PriorityLevelEnablementLimited
|
||||||
b.object.Spec.Limited = &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
b.object.Spec.Limited = &flowcontrolv1beta3.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: assuredConcurrencyShares,
|
NominalConcurrencyShares: nominalConcurrencyShares,
|
||||||
LimitResponse: flowcontrolv1beta3.LimitResponse{
|
LimitResponse: flowcontrolv1beta3.LimitResponse{
|
||||||
Type: flowcontrolv1beta3.LimitResponseTypeReject,
|
Type: flowcontrolv1beta3.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
|
@ -21,7 +21,9 @@ import (
|
|||||||
|
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||||
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/storage/names"
|
"k8s.io/apiserver/pkg/storage/names"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
"k8s.io/kubernetes/pkg/apis/flowcontrol"
|
||||||
@ -85,7 +87,7 @@ func (priorityLevelConfigurationStrategy) PrepareForUpdate(ctx context.Context,
|
|||||||
|
|
||||||
// Validate validates a new priority-level.
|
// Validate validates a new priority-level.
|
||||||
func (priorityLevelConfigurationStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList {
|
func (priorityLevelConfigurationStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList {
|
||||||
return validation.ValidatePriorityLevelConfiguration(obj.(*flowcontrol.PriorityLevelConfiguration))
|
return validation.ValidatePriorityLevelConfiguration(obj.(*flowcontrol.PriorityLevelConfiguration), getRequestGroupVersion(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
// WarningsOnCreate returns warnings for the creation of the given object.
|
// WarningsOnCreate returns warnings for the creation of the given object.
|
||||||
@ -108,7 +110,7 @@ func (priorityLevelConfigurationStrategy) AllowCreateOnUpdate() bool {
|
|||||||
|
|
||||||
// ValidateUpdate is the default update validation for an end user.
|
// ValidateUpdate is the default update validation for an end user.
|
||||||
func (priorityLevelConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
|
func (priorityLevelConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
|
||||||
return validation.ValidatePriorityLevelConfiguration(obj.(*flowcontrol.PriorityLevelConfiguration))
|
return validation.ValidatePriorityLevelConfiguration(obj.(*flowcontrol.PriorityLevelConfiguration), getRequestGroupVersion(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
// WarningsOnUpdate returns warnings for the given update.
|
// WarningsOnUpdate returns warnings for the given update.
|
||||||
@ -168,3 +170,10 @@ func (priorityLevelConfigurationStatusStrategy) ValidateUpdate(ctx context.Conte
|
|||||||
func (priorityLevelConfigurationStatusStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Object) []string {
|
func (priorityLevelConfigurationStatusStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Object) []string {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getRequestGroupVersion(ctx context.Context) schema.GroupVersion {
|
||||||
|
if requestInfo, exists := genericapirequest.RequestInfoFrom(ctx); exists {
|
||||||
|
return schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion}
|
||||||
|
}
|
||||||
|
return schema.GroupVersion{}
|
||||||
|
}
|
||||||
|
@ -690,100 +690,100 @@ func init() {
|
|||||||
|
|
||||||
var fileDescriptor_803504887082f044 = []byte{
|
var fileDescriptor_803504887082f044 = []byte{
|
||||||
// 1498 bytes of a gzipped FileDescriptorProto
|
// 1498 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4d, 0x73, 0xdb, 0xc4,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4b, 0x73, 0x13, 0xc7,
|
||||||
0x1b, 0x8f, 0x1c, 0x3b, 0x89, 0x9f, 0xbc, 0x76, 0xd3, 0x4e, 0x3c, 0xe9, 0x8c, 0x9d, 0xea, 0x3f,
|
0x16, 0xf6, 0xc8, 0x92, 0x6d, 0x1d, 0x3f, 0x69, 0x43, 0x59, 0x65, 0xaa, 0x24, 0x33, 0xb7, 0xea,
|
||||||
0xf3, 0x2f, 0xd0, 0x56, 0xee, 0x2b, 0x2d, 0x30, 0xbc, 0x44, 0x29, 0x94, 0xd2, 0x24, 0x4d, 0x37,
|
0x72, 0xef, 0x05, 0x46, 0x3c, 0x2f, 0x24, 0xa9, 0x3c, 0x18, 0x93, 0x10, 0x82, 0x6d, 0x4c, 0x1b,
|
||||||
0x2d, 0x30, 0xa5, 0x33, 0x54, 0x96, 0x37, 0xb6, 0x1a, 0x5b, 0x52, 0xb5, 0x2b, 0x67, 0x42, 0x2f,
|
0x92, 0x14, 0xa1, 0x2a, 0x8c, 0x47, 0x6d, 0xa9, 0xb1, 0x34, 0x33, 0x4c, 0xf7, 0xc8, 0xe5, 0xb0,
|
||||||
0x0c, 0x9f, 0x80, 0x33, 0x1c, 0x39, 0x70, 0xe7, 0x0b, 0x70, 0xa4, 0xc3, 0xa9, 0xc7, 0x9e, 0x0c,
|
0x49, 0xe5, 0x17, 0x64, 0x9d, 0x2c, 0xb3, 0xc8, 0x3e, 0x7f, 0x20, 0xcb, 0x50, 0x59, 0xb1, 0x64,
|
||||||
0x35, 0x27, 0x0e, 0xdc, 0xa1, 0x27, 0x66, 0x57, 0x2b, 0xc9, 0xf2, 0x9b, 0x3c, 0xed, 0x4c, 0x4f,
|
0xa5, 0x04, 0x65, 0x95, 0x45, 0xf6, 0x09, 0xab, 0x54, 0xf7, 0xb4, 0x66, 0x34, 0x7a, 0x8d, 0x0a,
|
||||||
0xdc, 0xac, 0xe7, 0xe5, 0xf7, 0xbc, 0xec, 0x6f, 0x9f, 0x7d, 0x12, 0xb8, 0xb6, 0x7f, 0x85, 0x6a,
|
0xaa, 0x58, 0x65, 0xa7, 0x39, 0x8f, 0xef, 0x3c, 0xfa, 0xeb, 0xd3, 0xc7, 0x86, 0xeb, 0xfb, 0x57,
|
||||||
0x96, 0x53, 0xde, 0xf7, 0x2b, 0xc4, 0xb3, 0x09, 0x23, 0xb4, 0xdc, 0x22, 0x76, 0xd5, 0xf1, 0xca,
|
0x98, 0x41, 0xdd, 0xf2, 0x7e, 0xb0, 0x4b, 0x7c, 0x87, 0x70, 0xc2, 0xca, 0x4d, 0xe2, 0x54, 0x5c,
|
||||||
0x52, 0x61, 0xb8, 0x56, 0x79, 0xaf, 0xe1, 0x1c, 0x98, 0x8e, 0xcd, 0x3c, 0xa7, 0x51, 0x6e, 0x9d,
|
0xbf, 0xac, 0x14, 0x96, 0x47, 0xcb, 0x7b, 0x75, 0xf7, 0xc0, 0x76, 0x1d, 0xee, 0xbb, 0xf5, 0x72,
|
||||||
0xab, 0x10, 0x66, 0x5c, 0x28, 0xd7, 0x88, 0x4d, 0x3c, 0x83, 0x91, 0xaa, 0xe6, 0x7a, 0x0e, 0x73,
|
0xf3, 0xdc, 0x2e, 0xe1, 0xd6, 0x85, 0x72, 0x95, 0x38, 0xc4, 0xb7, 0x38, 0xa9, 0x18, 0x9e, 0xef,
|
||||||
0x50, 0x31, 0xb0, 0xd7, 0x0c, 0xd7, 0xd2, 0xba, 0xec, 0x35, 0x69, 0xbf, 0x7a, 0xa6, 0x66, 0xb1,
|
0x72, 0x17, 0x15, 0x43, 0x7b, 0xc3, 0xf2, 0xa8, 0xd1, 0x65, 0x6f, 0x28, 0xfb, 0xd5, 0x33, 0x55,
|
||||||
0xba, 0x5f, 0xd1, 0x4c, 0xa7, 0x59, 0xae, 0x39, 0x35, 0xa7, 0x2c, 0xdc, 0x2a, 0xfe, 0x9e, 0xf8,
|
0xca, 0x6b, 0xc1, 0xae, 0x61, 0xbb, 0x8d, 0x72, 0xd5, 0xad, 0xba, 0x65, 0xe9, 0xb6, 0x1b, 0xec,
|
||||||
0x12, 0x1f, 0xe2, 0x57, 0x00, 0xb7, 0x7a, 0x31, 0x0e, 0xdf, 0x34, 0xcc, 0xba, 0x65, 0x13, 0xef,
|
0xc9, 0x2f, 0xf9, 0x21, 0x7f, 0x85, 0x70, 0xab, 0x17, 0xe3, 0xf0, 0x0d, 0xcb, 0xae, 0x51, 0x87,
|
||||||
0xb0, 0xec, 0xee, 0xd7, 0xb8, 0x80, 0x96, 0x9b, 0x84, 0x19, 0xe5, 0xd6, 0xb9, 0xde, 0x24, 0x56,
|
0xf8, 0x87, 0x65, 0x6f, 0xbf, 0x2a, 0x04, 0xac, 0xdc, 0x20, 0xdc, 0x2a, 0x37, 0xcf, 0xf5, 0x26,
|
||||||
0xcb, 0xc3, 0xbc, 0x3c, 0xdf, 0x66, 0x56, 0x93, 0xf4, 0x39, 0xbc, 0x99, 0xe6, 0x40, 0xcd, 0x3a,
|
0xb1, 0x5a, 0x1e, 0xe6, 0xe5, 0x07, 0x0e, 0xa7, 0x0d, 0xd2, 0xe7, 0xf0, 0xff, 0x34, 0x07, 0x66,
|
||||||
0x69, 0x1a, 0xbd, 0x7e, 0xea, 0x5d, 0x58, 0xf9, 0xa8, 0xe1, 0x1c, 0x5c, 0xb5, 0x28, 0xb3, 0xec,
|
0xd7, 0x48, 0xc3, 0xea, 0xf5, 0xd3, 0xef, 0xc1, 0xca, 0x07, 0x75, 0xf7, 0xe0, 0x1a, 0x65, 0x9c,
|
||||||
0x9a, 0x6f, 0xd1, 0x3a, 0xf1, 0xb6, 0x08, 0xab, 0x3b, 0x55, 0xf4, 0x3e, 0x64, 0xd9, 0xa1, 0x4b,
|
0x3a, 0xd5, 0x80, 0xb2, 0x1a, 0xf1, 0x37, 0x09, 0xaf, 0xb9, 0x15, 0xf4, 0x2e, 0x64, 0xf9, 0xa1,
|
||||||
0x0a, 0xca, 0x9a, 0xf2, 0x5a, 0x5e, 0x3f, 0xf5, 0xb8, 0x5d, 0x9a, 0xe8, 0xb4, 0x4b, 0xd9, 0xdb,
|
0x47, 0x0a, 0xda, 0x9a, 0xf6, 0x9f, 0xbc, 0x79, 0xea, 0x49, 0xab, 0x34, 0xd1, 0x6e, 0x95, 0xb2,
|
||||||
0x87, 0x2e, 0x79, 0xde, 0x2e, 0x1d, 0x1f, 0xe2, 0xc6, 0xd5, 0x58, 0x38, 0xaa, 0xdf, 0x65, 0x00,
|
0x77, 0x0e, 0x3d, 0xf2, 0xa2, 0x55, 0x3a, 0x3e, 0xc4, 0x4d, 0xa8, 0xb1, 0x74, 0xd4, 0xbf, 0xc9,
|
||||||
0xb8, 0xd5, 0xae, 0x08, 0x8d, 0xee, 0xc3, 0x0c, 0x2f, 0xb7, 0x6a, 0x30, 0x43, 0x60, 0xce, 0x9e,
|
0x00, 0x08, 0xab, 0x1d, 0x19, 0x1a, 0x3d, 0x80, 0x19, 0x51, 0x6e, 0xc5, 0xe2, 0x96, 0xc4, 0x9c,
|
||||||
0x3f, 0xab, 0xc5, 0xbd, 0x8e, 0xb2, 0xd6, 0xdc, 0xfd, 0x1a, 0x17, 0x50, 0x8d, 0x5b, 0x6b, 0xad,
|
0x3d, 0x7f, 0xd6, 0x88, 0x7b, 0x1d, 0x65, 0x6d, 0x78, 0xfb, 0x55, 0x21, 0x60, 0x86, 0xb0, 0x36,
|
||||||
0x73, 0xda, 0xcd, 0xca, 0x03, 0x62, 0xb2, 0x2d, 0xc2, 0x0c, 0x1d, 0xc9, 0x2c, 0x20, 0x96, 0xe1,
|
0x9a, 0xe7, 0x8c, 0x5b, 0xbb, 0x0f, 0x89, 0xcd, 0x37, 0x09, 0xb7, 0x4c, 0xa4, 0xb2, 0x80, 0x58,
|
||||||
0x08, 0x15, 0xed, 0x40, 0x96, 0xba, 0xc4, 0x2c, 0x64, 0x04, 0xba, 0xa6, 0x8d, 0x3e, 0x49, 0x2d,
|
0x86, 0x23, 0x54, 0xb4, 0x0d, 0x59, 0xe6, 0x11, 0xbb, 0x90, 0x91, 0xe8, 0x86, 0x31, 0xfa, 0x24,
|
||||||
0xce, 0x6d, 0xd7, 0x25, 0xa6, 0x3e, 0x17, 0x56, 0xc8, 0xbf, 0xb0, 0x40, 0x42, 0x9f, 0xc3, 0x14,
|
0x8d, 0x38, 0xb7, 0x1d, 0x8f, 0xd8, 0xe6, 0x5c, 0xa7, 0x42, 0xf1, 0x85, 0x25, 0x12, 0xfa, 0x14,
|
||||||
0x65, 0x06, 0xf3, 0x69, 0x61, 0xb2, 0x2f, 0xe3, 0x34, 0x4c, 0xe1, 0xa7, 0x2f, 0x48, 0xd4, 0xa9,
|
0xa6, 0x18, 0xb7, 0x78, 0xc0, 0x0a, 0x93, 0x7d, 0x19, 0xa7, 0x61, 0x4a, 0x3f, 0x73, 0x41, 0xa1,
|
||||||
0xe0, 0x1b, 0x4b, 0x3c, 0xf5, 0x69, 0x06, 0x96, 0x63, 0xe3, 0x0d, 0xc7, 0xae, 0x5a, 0xcc, 0x72,
|
0x4e, 0x85, 0xdf, 0x58, 0xe1, 0xe9, 0xcf, 0x32, 0xb0, 0x1c, 0x1b, 0xaf, 0xbb, 0x4e, 0x85, 0x72,
|
||||||
0x6c, 0xf4, 0x4e, 0xa2, 0xeb, 0x27, 0x7b, 0xba, 0xbe, 0x32, 0xc0, 0x25, 0xee, 0x38, 0x7a, 0x2b,
|
0xea, 0x3a, 0xe8, 0xad, 0x44, 0xd7, 0x4f, 0xf6, 0x74, 0x7d, 0x65, 0x80, 0x4b, 0xdc, 0x71, 0xf4,
|
||||||
0x4a, 0x37, 0x23, 0xdc, 0x4f, 0x24, 0x83, 0x3f, 0x6f, 0x97, 0x16, 0x23, 0xb7, 0x64, 0x3e, 0xa8,
|
0x46, 0x94, 0x6e, 0x46, 0xba, 0x9f, 0x48, 0x06, 0x7f, 0xd1, 0x2a, 0x2d, 0x46, 0x6e, 0xc9, 0x7c,
|
||||||
0x05, 0xa8, 0x61, 0x50, 0x76, 0xdb, 0x33, 0x6c, 0x1a, 0xc0, 0x5a, 0x4d, 0x22, 0xab, 0x7e, 0x63,
|
0x50, 0x13, 0x50, 0xdd, 0x62, 0xfc, 0x8e, 0x6f, 0x39, 0x2c, 0x84, 0xa5, 0x0d, 0xa2, 0xaa, 0xfe,
|
||||||
0xbc, 0x73, 0xe2, 0x1e, 0xfa, 0xaa, 0x0c, 0x89, 0x36, 0xfb, 0xd0, 0xf0, 0x80, 0x08, 0xe8, 0xff,
|
0xdf, 0x78, 0xe7, 0x24, 0x3c, 0xcc, 0x55, 0x15, 0x12, 0x6d, 0xf4, 0xa1, 0xe1, 0x01, 0x11, 0xd0,
|
||||||
0x30, 0xe5, 0x11, 0x83, 0x3a, 0x76, 0x21, 0x2b, 0x52, 0x8e, 0xfa, 0x85, 0x85, 0x14, 0x4b, 0x2d,
|
0xbf, 0x61, 0xca, 0x27, 0x16, 0x73, 0x9d, 0x42, 0x56, 0xa6, 0x1c, 0xf5, 0x0b, 0x4b, 0x29, 0x56,
|
||||||
0x7a, 0x1d, 0xa6, 0x9b, 0x84, 0x52, 0xa3, 0x46, 0x0a, 0x39, 0x61, 0xb8, 0x28, 0x0d, 0xa7, 0xb7,
|
0x5a, 0xf4, 0x5f, 0x98, 0x6e, 0x10, 0xc6, 0xac, 0x2a, 0x29, 0xe4, 0xa4, 0xe1, 0xa2, 0x32, 0x9c,
|
||||||
0x02, 0x31, 0x0e, 0xf5, 0xea, 0xcf, 0x0a, 0x2c, 0xc4, 0x7d, 0xda, 0xb4, 0x28, 0x43, 0xf7, 0xfa,
|
0xde, 0x0c, 0xc5, 0xb8, 0xa3, 0xd7, 0x7f, 0xd4, 0x60, 0x21, 0xee, 0xd3, 0x06, 0x65, 0x1c, 0xdd,
|
||||||
0xb8, 0xa7, 0x8d, 0x57, 0x13, 0xf7, 0x16, 0xcc, 0x5b, 0x92, 0xe1, 0x66, 0x42, 0x49, 0x17, 0xef,
|
0xef, 0xe3, 0x9e, 0x31, 0x5e, 0x4d, 0xc2, 0x5b, 0x32, 0x6f, 0x49, 0x85, 0x9b, 0xe9, 0x48, 0xba,
|
||||||
0x6e, 0x42, 0xce, 0x62, 0xa4, 0xc9, 0xbb, 0x3e, 0xd9, 0xd3, 0xae, 0x14, 0x92, 0xe8, 0xf3, 0x12,
|
0x78, 0x77, 0x0b, 0x72, 0x94, 0x93, 0x86, 0xe8, 0xfa, 0x64, 0x4f, 0xbb, 0x52, 0x48, 0x62, 0xce,
|
||||||
0x36, 0x77, 0x9d, 0x03, 0xe0, 0x00, 0x47, 0xfd, 0x73, 0xb2, 0xbb, 0x02, 0xce, 0x47, 0xf4, 0xa3,
|
0x2b, 0xd8, 0xdc, 0x0d, 0x01, 0x80, 0x43, 0x1c, 0xfd, 0xf7, 0xc9, 0xee, 0x0a, 0x04, 0x1f, 0xd1,
|
||||||
0x02, 0xab, 0xae, 0x67, 0x39, 0x9e, 0xc5, 0x0e, 0x37, 0x49, 0x8b, 0x34, 0x36, 0x1c, 0x7b, 0xcf,
|
0xf7, 0x1a, 0xac, 0x7a, 0x3e, 0x75, 0x7d, 0xca, 0x0f, 0x37, 0x48, 0x93, 0xd4, 0xd7, 0x5d, 0x67,
|
||||||
0xaa, 0xf9, 0x9e, 0xc1, 0x5b, 0x29, 0x8b, 0xda, 0x48, 0x8b, 0xbc, 0x33, 0x14, 0x01, 0x93, 0x3d,
|
0x8f, 0x56, 0x03, 0xdf, 0x12, 0xad, 0x54, 0x45, 0xad, 0xa7, 0x45, 0xde, 0x1e, 0x8a, 0x80, 0xc9,
|
||||||
0xe2, 0x11, 0xdb, 0x24, 0xba, 0x2a, 0x53, 0x5a, 0x1d, 0x61, 0x3c, 0x22, 0x15, 0xf4, 0x09, 0xa0,
|
0x1e, 0xf1, 0x89, 0x63, 0x13, 0x53, 0x57, 0x29, 0xad, 0x8e, 0x30, 0x1e, 0x91, 0x0a, 0xfa, 0x08,
|
||||||
0xa6, 0xc1, 0x78, 0x47, 0x6b, 0x3b, 0x1e, 0x31, 0x49, 0x95, 0xa3, 0x0a, 0x42, 0xe6, 0x62, 0x76,
|
0x50, 0xc3, 0xe2, 0xa2, 0xa3, 0xd5, 0x6d, 0x9f, 0xd8, 0xa4, 0x22, 0x50, 0x25, 0x21, 0x73, 0x31,
|
||||||
0x6c, 0xf5, 0x59, 0xe0, 0x01, 0x5e, 0xe8, 0x1b, 0x05, 0x96, 0xab, 0xfd, 0x43, 0x46, 0xf2, 0xf2,
|
0x3b, 0x36, 0xfb, 0x2c, 0xf0, 0x00, 0x2f, 0xf4, 0x95, 0x06, 0xcb, 0x95, 0xfe, 0x21, 0xa3, 0x78,
|
||||||
0xf2, 0x38, 0x8d, 0x1e, 0x30, 0xa3, 0xf4, 0x95, 0x4e, 0xbb, 0xb4, 0x3c, 0x40, 0x81, 0x07, 0x05,
|
0x79, 0x79, 0x9c, 0x46, 0x0f, 0x98, 0x51, 0xe6, 0x4a, 0xbb, 0x55, 0x5a, 0x1e, 0xa0, 0xc0, 0x83,
|
||||||
0x43, 0xf7, 0x20, 0xe7, 0xf9, 0x0d, 0x42, 0x0b, 0x59, 0x71, 0xbc, 0xa9, 0x51, 0x77, 0x9c, 0x86,
|
0x82, 0xa1, 0xfb, 0x90, 0xf3, 0x83, 0x3a, 0x61, 0x85, 0xac, 0x3c, 0xde, 0xd4, 0xa8, 0xdb, 0x6e,
|
||||||
0x65, 0x1e, 0x62, 0xee, 0xf2, 0x99, 0xc5, 0xea, 0xbb, 0xbe, 0x98, 0x55, 0x34, 0x3e, 0x6b, 0xa1,
|
0x9d, 0xda, 0x87, 0x58, 0xb8, 0x7c, 0x42, 0x79, 0x6d, 0x27, 0x90, 0xb3, 0x8a, 0xc5, 0x67, 0x2d,
|
||||||
0xc2, 0x01, 0xa8, 0xfa, 0x08, 0x96, 0x7a, 0x87, 0x06, 0xaa, 0x01, 0x98, 0xe1, 0x3d, 0xa5, 0x05,
|
0x55, 0x38, 0x04, 0xd5, 0x1f, 0xc3, 0x52, 0xef, 0xd0, 0x40, 0x55, 0x00, 0xbb, 0x73, 0x4f, 0x59,
|
||||||
0x45, 0x84, 0xbd, 0x30, 0x3e, 0xab, 0xa2, 0x3b, 0x1e, 0xcf, 0xcb, 0x48, 0x44, 0x71, 0x17, 0xb4,
|
0x41, 0x93, 0x61, 0x2f, 0x8c, 0xcf, 0xaa, 0xe8, 0x8e, 0xc7, 0xf3, 0x32, 0x12, 0x31, 0xdc, 0x05,
|
||||||
0x7a, 0x16, 0xe6, 0xae, 0x79, 0x8e, 0xef, 0xca, 0x1c, 0xd1, 0x1a, 0x64, 0x6d, 0xa3, 0x19, 0x4e,
|
0xad, 0x9f, 0x85, 0xb9, 0xeb, 0xbe, 0x1b, 0x78, 0x2a, 0x47, 0xb4, 0x06, 0x59, 0xc7, 0x6a, 0x74,
|
||||||
0x9f, 0x68, 0x22, 0x6e, 0x1b, 0x4d, 0x82, 0x85, 0x46, 0xfd, 0x41, 0x81, 0xf9, 0x4d, 0xab, 0x69,
|
0xa6, 0x4f, 0x34, 0x11, 0xb7, 0xac, 0x06, 0xc1, 0x52, 0xa3, 0x7f, 0xa7, 0xc1, 0xfc, 0x06, 0x6d,
|
||||||
0x31, 0x4c, 0xa8, 0xeb, 0xd8, 0x94, 0xa0, 0x4b, 0x89, 0x89, 0x75, 0xa2, 0x67, 0x62, 0x1d, 0x49,
|
0x50, 0x8e, 0x09, 0xf3, 0x5c, 0x87, 0x11, 0x74, 0x29, 0x31, 0xb1, 0x4e, 0xf4, 0x4c, 0xac, 0x23,
|
||||||
0x18, 0x77, 0xcd, 0xaa, 0x2f, 0x60, 0xfa, 0xa1, 0x4f, 0x7c, 0xcb, 0xae, 0xc9, 0x79, 0x7d, 0x31,
|
0x09, 0xe3, 0xae, 0x59, 0xf5, 0x19, 0x4c, 0x3f, 0x0a, 0x48, 0x40, 0x9d, 0xaa, 0x9a, 0xd7, 0x17,
|
||||||
0xad, 0xc0, 0x5b, 0x81, 0x79, 0x82, 0x6d, 0xfa, 0x2c, 0x1f, 0x01, 0x52, 0x83, 0x43, 0x44, 0xf5,
|
0xd3, 0x0a, 0xbc, 0x1d, 0x9a, 0x27, 0xd8, 0x66, 0xce, 0x8a, 0x11, 0xa0, 0x34, 0xb8, 0x83, 0xa8,
|
||||||
0x2f, 0x05, 0x4e, 0x88, 0xc0, 0xa4, 0x3a, 0x9c, 0xc5, 0xe8, 0x1e, 0x14, 0x0c, 0x4a, 0x7d, 0x8f,
|
0xff, 0xa1, 0xc1, 0x09, 0x19, 0x98, 0x54, 0x86, 0xb3, 0x18, 0xdd, 0x87, 0x82, 0xe3, 0x36, 0xa8,
|
||||||
0x54, 0x37, 0x1c, 0xdb, 0xf4, 0x3d, 0xce, 0xff, 0xc3, 0xdd, 0xba, 0xe1, 0x11, 0x2a, 0xaa, 0xc9,
|
0x63, 0x09, 0xb9, 0x1d, 0xf8, 0x82, 0xff, 0x87, 0x3b, 0x35, 0xcb, 0x27, 0x4c, 0x56, 0x93, 0x33,
|
||||||
0xe9, 0x6b, 0xb2, 0x9a, 0xc2, 0xfa, 0x10, 0x3b, 0x3c, 0x14, 0x01, 0x3d, 0x80, 0xf9, 0x46, 0x77,
|
0xd7, 0x54, 0x35, 0x85, 0xad, 0x21, 0x76, 0x78, 0x28, 0x02, 0x7a, 0x08, 0xf3, 0xf5, 0xee, 0xda,
|
||||||
0xed, 0xb2, 0xcc, 0x33, 0x69, 0x65, 0x26, 0x1a, 0xa6, 0x1f, 0x93, 0x19, 0x24, 0x9b, 0x8e, 0x93,
|
0x55, 0x99, 0x67, 0xd2, 0xca, 0x4c, 0x34, 0xcc, 0x3c, 0xa6, 0x32, 0x48, 0x36, 0x1d, 0x27, 0xa1,
|
||||||
0xd0, 0xea, 0x01, 0x1c, 0xdb, 0xe6, 0x77, 0x98, 0x3a, 0xbe, 0x67, 0x92, 0x98, 0x80, 0xa8, 0x04,
|
0xf5, 0x03, 0x38, 0xb6, 0x25, 0xee, 0x30, 0x73, 0x03, 0xdf, 0x26, 0x31, 0x01, 0x51, 0x09, 0x72,
|
||||||
0xb9, 0x16, 0xf1, 0x2a, 0x01, 0x89, 0xf2, 0x7a, 0x9e, 0xd3, 0xef, 0x53, 0x2e, 0xc0, 0x81, 0x1c,
|
0x4d, 0xe2, 0xef, 0x86, 0x24, 0xca, 0x9b, 0x79, 0x41, 0xbf, 0x8f, 0x85, 0x00, 0x87, 0x72, 0xf4,
|
||||||
0xbd, 0x0b, 0x8b, 0x76, 0xec, 0x79, 0x07, 0x6f, 0xd2, 0xc2, 0x94, 0x30, 0x5d, 0xee, 0xb4, 0x4b,
|
0x36, 0x2c, 0x3a, 0xb1, 0xe7, 0x5d, 0xbc, 0xc1, 0x0a, 0x53, 0xd2, 0x74, 0xb9, 0xdd, 0x2a, 0x2d,
|
||||||
0x8b, 0xdb, 0x49, 0x15, 0xee, 0xb5, 0x55, 0xdb, 0x19, 0x58, 0x19, 0xc2, 0x77, 0x74, 0x07, 0x66,
|
0x6e, 0x25, 0x55, 0xb8, 0xd7, 0x56, 0x6f, 0x65, 0x60, 0x65, 0x08, 0xdf, 0xd1, 0x5d, 0x98, 0x61,
|
||||||
0xa8, 0xfc, 0x2d, 0x39, 0x7c, 0x32, 0xad, 0x76, 0xe9, 0x1b, 0x4f, 0xdb, 0x10, 0x0c, 0x47, 0x50,
|
0xea, 0xb7, 0xe2, 0xf0, 0xc9, 0xb4, 0xda, 0x95, 0x6f, 0x3c, 0x6d, 0x3b, 0x60, 0x38, 0x82, 0x42,
|
||||||
0xc8, 0x81, 0x79, 0x4f, 0xa6, 0x20, 0x62, 0xca, 0xa9, 0x7b, 0x3e, 0x0d, 0xbb, 0xbf, 0x3b, 0x71,
|
0x2e, 0xcc, 0xfb, 0x2a, 0x05, 0x19, 0x53, 0x4d, 0xdd, 0xf3, 0x69, 0xd8, 0xfd, 0xdd, 0x89, 0x9b,
|
||||||
0x73, 0x71, 0x37, 0x20, 0x4e, 0xe2, 0xa3, 0x47, 0xb0, 0xd4, 0x55, 0x76, 0x10, 0x73, 0x52, 0xc4,
|
0x8b, 0xbb, 0x01, 0x71, 0x12, 0x1f, 0x3d, 0x86, 0xa5, 0xae, 0xb2, 0xc3, 0x98, 0x93, 0x32, 0xe6,
|
||||||
0xbc, 0x94, 0x16, 0x73, 0xe0, 0xa1, 0xe8, 0x05, 0x19, 0x76, 0x69, 0xbb, 0x07, 0x16, 0xf7, 0x05,
|
0xa5, 0xb4, 0x98, 0x03, 0x0f, 0xc5, 0x2c, 0xa8, 0xb0, 0x4b, 0x5b, 0x3d, 0xb0, 0xb8, 0x2f, 0x90,
|
||||||
0x52, 0x7f, 0xcd, 0xc0, 0x88, 0x41, 0xfc, 0x0a, 0x96, 0xaa, 0xfb, 0x89, 0xa5, 0xea, 0xbd, 0x17,
|
0xfe, 0x73, 0x06, 0x46, 0x0c, 0xe2, 0xd7, 0xb0, 0x54, 0x3d, 0x48, 0x2c, 0x55, 0xef, 0xbc, 0xfc,
|
||||||
0x7f, 0x61, 0x86, 0x2e, 0x59, 0xf5, 0x9e, 0x25, 0xeb, 0x83, 0x97, 0x88, 0x31, 0x7a, 0xe9, 0xfa,
|
0x0b, 0x33, 0x74, 0xc9, 0xaa, 0xf5, 0x2c, 0x59, 0xef, 0xbd, 0x42, 0x8c, 0xd1, 0x4b, 0xd7, 0x9f,
|
||||||
0x3b, 0x03, 0xff, 0x1b, 0xee, 0x1c, 0x2f, 0x61, 0x37, 0x12, 0x23, 0xed, 0x72, 0xcf, 0x48, 0x3b,
|
0x19, 0xf8, 0xd7, 0x70, 0xe7, 0x78, 0x09, 0xbb, 0x99, 0x18, 0x69, 0x97, 0x7b, 0x46, 0xda, 0xc9,
|
||||||
0x39, 0x06, 0xc4, 0x7f, 0x4b, 0x59, 0xcf, 0x52, 0xf6, 0x9b, 0x02, 0xc5, 0xe1, 0x7d, 0x7b, 0x05,
|
0x31, 0x20, 0xfe, 0x59, 0xca, 0x7a, 0x96, 0xb2, 0x5f, 0x34, 0x28, 0x0e, 0xef, 0xdb, 0x6b, 0x58,
|
||||||
0x4b, 0xda, 0x97, 0xc9, 0x25, 0xed, 0xed, 0x17, 0x27, 0xd9, 0x90, 0xa5, 0xed, 0xda, 0x28, 0x6e,
|
0xd2, 0x3e, 0x4f, 0x2e, 0x69, 0x6f, 0xbe, 0x3c, 0xc9, 0x86, 0x2c, 0x6d, 0xd7, 0x47, 0x71, 0x2b,
|
||||||
0x45, 0xeb, 0xd5, 0x18, 0x4f, 0xec, 0x2f, 0x23, 0x5b, 0x25, 0xb6, 0xc1, 0x94, 0xbf, 0x12, 0x12,
|
0x5a, 0xaf, 0xc6, 0x78, 0x62, 0x7f, 0x1a, 0xd9, 0x2a, 0xb9, 0x0d, 0xa6, 0xfc, 0x95, 0x90, 0xf0,
|
||||||
0xde, 0x1f, 0xda, 0x46, 0xa5, 0x41, 0x9a, 0xc4, 0x66, 0x92, 0x90, 0x75, 0x98, 0x6e, 0x04, 0x6f,
|
0x7e, 0xdf, 0xb1, 0x76, 0xeb, 0xa4, 0x41, 0x1c, 0xae, 0x08, 0x59, 0x83, 0xe9, 0x7a, 0xf8, 0x36,
|
||||||
0xa3, 0xbc, 0xd4, 0xeb, 0x63, 0x3d, 0x49, 0xa3, 0x9e, 0xd2, 0xe0, 0x19, 0x96, 0x66, 0x38, 0x84,
|
0xaa, 0x4b, 0x7d, 0x75, 0xac, 0x27, 0x69, 0xd4, 0x53, 0x1a, 0x3e, 0xc3, 0xca, 0x0c, 0x77, 0xe0,
|
||||||
0x57, 0xbf, 0x57, 0x60, 0x2d, 0xed, 0xb2, 0xa2, 0x83, 0x01, 0xcb, 0xce, 0x4b, 0x2c, 0xb2, 0xe3,
|
0xf5, 0x6f, 0x35, 0x58, 0x4b, 0xbb, 0xac, 0xe8, 0x60, 0xc0, 0xb2, 0xf3, 0x0a, 0x8b, 0xec, 0xf8,
|
||||||
0x2f, 0x3f, 0x3f, 0x29, 0x70, 0x74, 0xd0, 0x4e, 0xc1, 0xe9, 0xcf, 0x17, 0x89, 0x68, 0x0b, 0x88,
|
0xcb, 0xcf, 0x0f, 0x1a, 0x1c, 0x1d, 0xb4, 0x53, 0x08, 0xfa, 0x8b, 0x45, 0x22, 0xda, 0x02, 0x22,
|
||||||
0xe8, 0x7f, 0x4b, 0x48, 0xb1, 0xd4, 0xa2, 0xd3, 0x30, 0x53, 0x37, 0xec, 0xea, 0xae, 0xf5, 0x55,
|
0xfa, 0xdf, 0x96, 0x52, 0xac, 0xb4, 0xe8, 0x34, 0xcc, 0xd4, 0x2c, 0xa7, 0xb2, 0x43, 0xbf, 0xe8,
|
||||||
0xb8, 0xdf, 0x46, 0x04, 0xfc, 0x58, 0xca, 0x71, 0x64, 0x81, 0xae, 0xc2, 0x92, 0xf0, 0xdb, 0x24,
|
0xec, 0xb7, 0x11, 0x01, 0x3f, 0x54, 0x72, 0x1c, 0x59, 0xa0, 0x6b, 0xb0, 0x24, 0xfd, 0x36, 0x88,
|
||||||
0x76, 0x8d, 0xd5, 0x45, 0xaf, 0xc4, 0x55, 0xce, 0xc5, 0xef, 0xc1, 0xad, 0x1e, 0x3d, 0xee, 0xf3,
|
0x53, 0xe5, 0x35, 0xd9, 0x2b, 0x79, 0x95, 0x73, 0xf1, 0x7b, 0x70, 0xbb, 0x47, 0x8f, 0xfb, 0x3c,
|
||||||
0x50, 0xff, 0x51, 0x00, 0xbd, 0xc8, 0x3b, 0x7f, 0x0a, 0xf2, 0x86, 0x6b, 0x89, 0x65, 0x2f, 0xb8,
|
0xf4, 0xbf, 0x34, 0x40, 0x2f, 0xf3, 0xce, 0x9f, 0x82, 0xbc, 0xe5, 0x51, 0xb9, 0xec, 0x85, 0x57,
|
||||||
0x02, 0x79, 0x7d, 0xbe, 0xd3, 0x2e, 0xe5, 0xd7, 0x77, 0xae, 0x07, 0x42, 0x1c, 0xeb, 0xb9, 0x71,
|
0x20, 0x6f, 0xce, 0xb7, 0x5b, 0xa5, 0xfc, 0xd5, 0xed, 0x1b, 0xa1, 0x10, 0xc7, 0x7a, 0x61, 0xdc,
|
||||||
0xf8, 0x04, 0x06, 0x4f, 0x9d, 0x34, 0x0e, 0x03, 0x53, 0x1c, 0xeb, 0xd1, 0x15, 0x98, 0x33, 0x1b,
|
0x79, 0x02, 0xc3, 0xa7, 0x4e, 0x19, 0x77, 0x02, 0x33, 0x1c, 0xeb, 0xd1, 0x15, 0x98, 0xb3, 0xeb,
|
||||||
0x3e, 0x65, 0xc4, 0xdb, 0x35, 0x1d, 0x97, 0x88, 0x91, 0x31, 0xa3, 0x1f, 0x95, 0x35, 0xcd, 0x6d,
|
0x01, 0xe3, 0xc4, 0xdf, 0xb1, 0x5d, 0x8f, 0xc8, 0x91, 0x31, 0x63, 0x1e, 0x55, 0x35, 0xcd, 0xad,
|
||||||
0x74, 0xe9, 0x70, 0xc2, 0x12, 0x69, 0x00, 0x9c, 0xf0, 0xd4, 0x35, 0x78, 0x9c, 0x9c, 0x88, 0xb3,
|
0x77, 0xe9, 0x70, 0xc2, 0x12, 0x19, 0x00, 0x82, 0xf0, 0xcc, 0xb3, 0x44, 0x9c, 0x9c, 0x8c, 0xb3,
|
||||||
0xc0, 0x0f, 0x6c, 0x3b, 0x92, 0xe2, 0x2e, 0x0b, 0xf5, 0x01, 0x1c, 0xdb, 0x25, 0x5e, 0xcb, 0x32,
|
0x20, 0x0e, 0x6c, 0x2b, 0x92, 0xe2, 0x2e, 0x0b, 0xfd, 0x21, 0x1c, 0xdb, 0x21, 0x7e, 0x93, 0xda,
|
||||||
0xc9, 0xba, 0x69, 0x3a, 0xbe, 0xcd, 0xc2, 0xb5, 0xb5, 0x0c, 0xf9, 0xc8, 0x4c, 0xde, 0x89, 0x23,
|
0xe4, 0xaa, 0x6d, 0xbb, 0x81, 0xc3, 0x3b, 0x6b, 0x6b, 0x19, 0xf2, 0x91, 0x99, 0xba, 0x13, 0x47,
|
||||||
0x32, 0x7e, 0x3e, 0xc2, 0xc2, 0xb1, 0x4d, 0x74, 0x09, 0x33, 0xc3, 0x2f, 0x61, 0x06, 0xa6, 0x63,
|
0x54, 0xfc, 0x7c, 0x84, 0x85, 0x63, 0x9b, 0xe8, 0x12, 0x66, 0x86, 0x5f, 0xc2, 0x0c, 0x4c, 0xc7,
|
||||||
0xf8, 0xec, 0xbe, 0x65, 0x57, 0x25, 0xf2, 0xf1, 0xd0, 0xfa, 0x86, 0x65, 0x57, 0x9f, 0xb7, 0x4b,
|
0xf0, 0xd9, 0x7d, 0xea, 0x54, 0x14, 0xf2, 0xf1, 0x8e, 0xf5, 0x4d, 0xea, 0x54, 0x5e, 0xb4, 0x4a,
|
||||||
0xb3, 0xd2, 0x8c, 0x7f, 0x62, 0x61, 0x88, 0xae, 0x43, 0xd6, 0xa7, 0xc4, 0x93, 0xd7, 0xeb, 0x54,
|
0xb3, 0xca, 0x4c, 0x7c, 0x62, 0x69, 0x88, 0x6e, 0x40, 0x36, 0x60, 0xc4, 0x57, 0xd7, 0xeb, 0x54,
|
||||||
0x1a, 0x99, 0xef, 0x50, 0xe2, 0x85, 0x9b, 0xcf, 0x0c, 0x47, 0xe6, 0x02, 0x2c, 0x20, 0xd0, 0x16,
|
0x1a, 0x99, 0xef, 0x32, 0xe2, 0x77, 0x36, 0x9f, 0x19, 0x81, 0x2c, 0x04, 0x58, 0x42, 0xa0, 0x4d,
|
||||||
0xe4, 0x6a, 0xfc, 0x50, 0xe4, 0xd4, 0x3f, 0x9d, 0x86, 0xd5, 0xbd, 0xce, 0x07, 0x34, 0x10, 0x12,
|
0xc8, 0x55, 0xc5, 0xa1, 0xa8, 0xa9, 0x7f, 0x3a, 0x0d, 0xab, 0x7b, 0x9d, 0x0f, 0x69, 0x20, 0x25,
|
||||||
0x1c, 0xa0, 0xa0, 0x87, 0xb0, 0x40, 0x13, 0x2d, 0x14, 0xc7, 0x35, 0xc6, 0x26, 0x33, 0xb0, 0xf1,
|
0x38, 0x44, 0x41, 0x8f, 0x60, 0x81, 0x25, 0x5a, 0x28, 0x8f, 0x6b, 0x8c, 0x4d, 0x66, 0x60, 0xe3,
|
||||||
0x3a, 0xea, 0xb4, 0x4b, 0x0b, 0x49, 0x15, 0xee, 0x09, 0xa0, 0x96, 0x61, 0xb6, 0xab, 0xc0, 0xf4,
|
0x4d, 0xd4, 0x6e, 0x95, 0x16, 0x92, 0x2a, 0xdc, 0x13, 0x40, 0x2f, 0xc3, 0x6c, 0x57, 0x81, 0xe9,
|
||||||
0xf9, 0xa7, 0x5f, 0x7d, 0xfc, 0xac, 0x38, 0xf1, 0xe4, 0x59, 0x71, 0xe2, 0xe9, 0xb3, 0xe2, 0xc4,
|
0xf3, 0xcf, 0xbc, 0xf6, 0xe4, 0x79, 0x71, 0xe2, 0xe9, 0xf3, 0xe2, 0xc4, 0xb3, 0xe7, 0xc5, 0x89,
|
||||||
0xd7, 0x9d, 0xa2, 0xf2, 0xb8, 0x53, 0x54, 0x9e, 0x74, 0x8a, 0xca, 0xd3, 0x4e, 0x51, 0xf9, 0xbd,
|
0x2f, 0xdb, 0x45, 0xed, 0x49, 0xbb, 0xa8, 0x3d, 0x6d, 0x17, 0xb5, 0x67, 0xed, 0xa2, 0xf6, 0x6b,
|
||||||
0x53, 0x54, 0xbe, 0xfd, 0xa3, 0x38, 0x71, 0xb7, 0x38, 0xfa, 0xff, 0x7a, 0xff, 0x06, 0x00, 0x00,
|
0xbb, 0xa8, 0x7d, 0xfd, 0x5b, 0x71, 0xe2, 0x5e, 0x71, 0xf4, 0xff, 0xf5, 0xfe, 0x0e, 0x00, 0x00,
|
||||||
0xff, 0xff, 0x36, 0x4f, 0xce, 0xba, 0x11, 0x14, 0x00, 0x00,
|
0xff, 0xff, 0x3d, 0xec, 0x35, 0xcf, 0x11, 0x14, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FlowDistinguisherMethod) Marshal() (dAtA []byte, err error) {
|
func (m *FlowDistinguisherMethod) Marshal() (dAtA []byte, err error) {
|
||||||
@ -1164,7 +1164,7 @@ func (m *LimitedPriorityLevelConfiguration) MarshalToSizedBuffer(dAtA []byte) (i
|
|||||||
}
|
}
|
||||||
i--
|
i--
|
||||||
dAtA[i] = 0x12
|
dAtA[i] = 0x12
|
||||||
i = encodeVarintGenerated(dAtA, i, uint64(m.AssuredConcurrencyShares))
|
i = encodeVarintGenerated(dAtA, i, uint64(m.NominalConcurrencyShares))
|
||||||
i--
|
i--
|
||||||
dAtA[i] = 0x8
|
dAtA[i] = 0x8
|
||||||
return len(dAtA) - i, nil
|
return len(dAtA) - i, nil
|
||||||
@ -1900,7 +1900,7 @@ func (m *LimitedPriorityLevelConfiguration) Size() (n int) {
|
|||||||
}
|
}
|
||||||
var l int
|
var l int
|
||||||
_ = l
|
_ = l
|
||||||
n += 1 + sovGenerated(uint64(m.AssuredConcurrencyShares))
|
n += 1 + sovGenerated(uint64(m.NominalConcurrencyShares))
|
||||||
l = m.LimitResponse.Size()
|
l = m.LimitResponse.Size()
|
||||||
n += 1 + l + sovGenerated(uint64(l))
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
return n
|
return n
|
||||||
@ -2256,7 +2256,7 @@ func (this *LimitedPriorityLevelConfiguration) String() string {
|
|||||||
return "nil"
|
return "nil"
|
||||||
}
|
}
|
||||||
s := strings.Join([]string{`&LimitedPriorityLevelConfiguration{`,
|
s := strings.Join([]string{`&LimitedPriorityLevelConfiguration{`,
|
||||||
`AssuredConcurrencyShares:` + fmt.Sprintf("%v", this.AssuredConcurrencyShares) + `,`,
|
`NominalConcurrencyShares:` + fmt.Sprintf("%v", this.NominalConcurrencyShares) + `,`,
|
||||||
`LimitResponse:` + strings.Replace(strings.Replace(this.LimitResponse.String(), "LimitResponse", "LimitResponse", 1), `&`, ``, 1) + `,`,
|
`LimitResponse:` + strings.Replace(strings.Replace(this.LimitResponse.String(), "LimitResponse", "LimitResponse", 1), `&`, ``, 1) + `,`,
|
||||||
`}`,
|
`}`,
|
||||||
}, "")
|
}, "")
|
||||||
@ -3492,9 +3492,9 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error {
|
|||||||
switch fieldNum {
|
switch fieldNum {
|
||||||
case 1:
|
case 1:
|
||||||
if wireType != 0 {
|
if wireType != 0 {
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field AssuredConcurrencyShares", wireType)
|
return fmt.Errorf("proto: wrong wireType = %d for field NominalConcurrencyShares", wireType)
|
||||||
}
|
}
|
||||||
m.AssuredConcurrencyShares = 0
|
m.NominalConcurrencyShares = 0
|
||||||
for shift := uint(0); ; shift += 7 {
|
for shift := uint(0); ; shift += 7 {
|
||||||
if shift >= 64 {
|
if shift >= 64 {
|
||||||
return ErrIntOverflowGenerated
|
return ErrIntOverflowGenerated
|
||||||
@ -3504,7 +3504,7 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error {
|
|||||||
}
|
}
|
||||||
b := dAtA[iNdEx]
|
b := dAtA[iNdEx]
|
||||||
iNdEx++
|
iNdEx++
|
||||||
m.AssuredConcurrencyShares |= int32(b&0x7F) << shift
|
m.NominalConcurrencyShares |= int32(b&0x7F) << shift
|
||||||
if b < 0x80 {
|
if b < 0x80 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -158,23 +158,23 @@ message LimitResponse {
|
|||||||
// - How are requests for this priority level limited?
|
// - How are requests for this priority level limited?
|
||||||
// - What should be done with requests that exceed the limit?
|
// - What should be done with requests that exceed the limit?
|
||||||
message LimitedPriorityLevelConfiguration {
|
message LimitedPriorityLevelConfiguration {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `nominalConcurrencyShares` (NCS) contributes to the computation of the
|
||||||
// limit, which is a limit on the number of requests of this
|
// NominalConcurrencyLimit (NominalCL) of this level.
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// This is the number of execution seats available at this priority level.
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// This is used both for requests dispatched from this priority level
|
||||||
// divided among the concurrency-controlled priority levels in
|
// as well as requests dispatched from other priority levels
|
||||||
// proportion to their assured concurrency shares. This produces
|
// borrowing seats from this level.
|
||||||
// the assured concurrency value (ACV) --- the number of requests
|
// The server's concurrency limit (ServerCL) is divided among the
|
||||||
// that may be executing at a time --- for each such priority
|
// Limited priority levels in proportion to their NCS values:
|
||||||
// level:
|
|
||||||
//
|
//
|
||||||
// ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )
|
// NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs )
|
||||||
|
// sum_ncs = sum[limited priority level k] NCS(k)
|
||||||
//
|
//
|
||||||
// bigger numbers of ACS mean more reserved concurrent requests (at the
|
// Bigger numbers mean a larger nominal concurrency limit,
|
||||||
// expense of every other PL).
|
// at the expense of every other Limited priority level.
|
||||||
// This field has a default value of 30.
|
// This field has a default value of 30.
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 assuredConcurrencyShares = 1;
|
optional int32 nominalConcurrencyShares = 1;
|
||||||
|
|
||||||
// `limitResponse` indicates what to do with requests that can not be executed right now
|
// `limitResponse` indicates what to do with requests that can not be executed right now
|
||||||
optional LimitResponse limitResponse = 2;
|
optional LimitResponse limitResponse = 2;
|
||||||
|
@ -452,23 +452,23 @@ const (
|
|||||||
// - How are requests for this priority level limited?
|
// - How are requests for this priority level limited?
|
||||||
// - What should be done with requests that exceed the limit?
|
// - What should be done with requests that exceed the limit?
|
||||||
type LimitedPriorityLevelConfiguration struct {
|
type LimitedPriorityLevelConfiguration struct {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `nominalConcurrencyShares` (NCS) contributes to the computation of the
|
||||||
// limit, which is a limit on the number of requests of this
|
// NominalConcurrencyLimit (NominalCL) of this level.
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// This is the number of execution seats available at this priority level.
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// This is used both for requests dispatched from this priority level
|
||||||
// divided among the concurrency-controlled priority levels in
|
// as well as requests dispatched from other priority levels
|
||||||
// proportion to their assured concurrency shares. This produces
|
// borrowing seats from this level.
|
||||||
// the assured concurrency value (ACV) --- the number of requests
|
// The server's concurrency limit (ServerCL) is divided among the
|
||||||
// that may be executing at a time --- for each such priority
|
// Limited priority levels in proportion to their NCS values:
|
||||||
// level:
|
|
||||||
//
|
//
|
||||||
// ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )
|
// NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs )
|
||||||
|
// sum_ncs = sum[limited priority level k] NCS(k)
|
||||||
//
|
//
|
||||||
// bigger numbers of ACS mean more reserved concurrent requests (at the
|
// Bigger numbers mean a larger nominal concurrency limit,
|
||||||
// expense of every other PL).
|
// at the expense of every other Limited priority level.
|
||||||
// This field has a default value of 30.
|
// This field has a default value of 30.
|
||||||
// +optional
|
// +optional
|
||||||
AssuredConcurrencyShares int32 `json:"assuredConcurrencyShares" protobuf:"varint,1,opt,name=assuredConcurrencyShares"`
|
NominalConcurrencyShares int32 `json:"nominalConcurrencyShares" protobuf:"varint,1,opt,name=nominalConcurrencyShares"`
|
||||||
|
|
||||||
// `limitResponse` indicates what to do with requests that can not be executed right now
|
// `limitResponse` indicates what to do with requests that can not be executed right now
|
||||||
LimitResponse LimitResponse `json:"limitResponse,omitempty" protobuf:"bytes,2,opt,name=limitResponse"`
|
LimitResponse LimitResponse `json:"limitResponse,omitempty" protobuf:"bytes,2,opt,name=limitResponse"`
|
||||||
|
@ -112,7 +112,7 @@ func (LimitResponse) SwaggerDoc() map[string]string {
|
|||||||
|
|
||||||
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
||||||
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
"nominalConcurrencyShares": "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats available at this priority level. This is used both for requests dispatched from this priority level as well as requests dispatched from other priority levels borrowing seats from this level. The server's concurrency limit (ServerCL) is divided among the Limited priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[limited priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other Limited priority level. This field has a default value of 30.",
|
||||||
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 5,
|
NominalConcurrencyShares: 5,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
@ -167,7 +167,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 30,
|
NominalConcurrencyShares: 30,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -183,7 +183,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 40,
|
NominalConcurrencyShares: 40,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -200,7 +200,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 10,
|
NominalConcurrencyShares: 10,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -217,7 +217,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 40,
|
NominalConcurrencyShares: 40,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -234,7 +234,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 100,
|
NominalConcurrencyShares: 100,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
@ -251,7 +251,7 @@ var (
|
|||||||
flowcontrol.PriorityLevelConfigurationSpec{
|
flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 20,
|
NominalConcurrencyShares: 20,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
|
@ -1268,7 +1268,7 @@ func newConfiguration(fsName, plName, user string, concurrency int32, queueLengt
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: concurrency,
|
NominalConcurrencyShares: concurrency,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: responseType,
|
Type: responseType,
|
||||||
Queuing: qcfg,
|
Queuing: qcfg,
|
||||||
|
@ -545,7 +545,7 @@ func (meal *cfgMeal) digestNewPLsLocked(newPLs []*flowcontrol.PriorityLevelConfi
|
|||||||
state.quiescing = false
|
state.quiescing = false
|
||||||
}
|
}
|
||||||
if state.pl.Spec.Limited != nil {
|
if state.pl.Spec.Limited != nil {
|
||||||
meal.shareSum += float64(state.pl.Spec.Limited.AssuredConcurrencyShares)
|
meal.shareSum += float64(state.pl.Spec.Limited.NominalConcurrencyShares)
|
||||||
}
|
}
|
||||||
meal.haveExemptPL = meal.haveExemptPL || pl.Name == flowcontrol.PriorityLevelConfigurationNameExempt
|
meal.haveExemptPL = meal.haveExemptPL || pl.Name == flowcontrol.PriorityLevelConfigurationNameExempt
|
||||||
meal.haveCatchAllPL = meal.haveCatchAllPL || pl.Name == flowcontrol.PriorityLevelConfigurationNameCatchAll
|
meal.haveCatchAllPL = meal.haveCatchAllPL || pl.Name == flowcontrol.PriorityLevelConfigurationNameCatchAll
|
||||||
@ -648,7 +648,7 @@ func (meal *cfgMeal) processOldPLsLocked() {
|
|||||||
// priority level continues to get a concurrency
|
// priority level continues to get a concurrency
|
||||||
// allocation determined by all the share values in the
|
// allocation determined by all the share values in the
|
||||||
// regular way.
|
// regular way.
|
||||||
meal.shareSum += float64(plState.pl.Spec.Limited.AssuredConcurrencyShares)
|
meal.shareSum += float64(plState.pl.Spec.Limited.NominalConcurrencyShares)
|
||||||
}
|
}
|
||||||
meal.haveExemptPL = meal.haveExemptPL || plName == flowcontrol.PriorityLevelConfigurationNameExempt
|
meal.haveExemptPL = meal.haveExemptPL || plName == flowcontrol.PriorityLevelConfigurationNameExempt
|
||||||
meal.haveCatchAllPL = meal.haveCatchAllPL || plName == flowcontrol.PriorityLevelConfigurationNameCatchAll
|
meal.haveCatchAllPL = meal.haveCatchAllPL || plName == flowcontrol.PriorityLevelConfigurationNameCatchAll
|
||||||
@ -669,7 +669,7 @@ func (meal *cfgMeal) finishQueueSetReconfigsLocked() {
|
|||||||
// The use of math.Ceil here means that the results might sum
|
// The use of math.Ceil here means that the results might sum
|
||||||
// to a little more than serverConcurrencyLimit but the
|
// to a little more than serverConcurrencyLimit but the
|
||||||
// difference will be negligible.
|
// difference will be negligible.
|
||||||
concurrencyLimit := int(math.Ceil(float64(meal.cfgCtlr.serverConcurrencyLimit) * float64(plState.pl.Spec.Limited.AssuredConcurrencyShares) / meal.shareSum))
|
concurrencyLimit := int(math.Ceil(float64(meal.cfgCtlr.serverConcurrencyLimit) * float64(plState.pl.Spec.Limited.NominalConcurrencyShares) / meal.shareSum))
|
||||||
metrics.UpdateSharedConcurrencyLimit(plName, concurrencyLimit)
|
metrics.UpdateSharedConcurrencyLimit(plName, concurrencyLimit)
|
||||||
meal.maxExecutingRequests += concurrencyLimit
|
meal.maxExecutingRequests += concurrencyLimit
|
||||||
var waitLimit int
|
var waitLimit int
|
||||||
@ -679,9 +679,9 @@ func (meal *cfgMeal) finishQueueSetReconfigsLocked() {
|
|||||||
meal.maxWaitingRequests += waitLimit
|
meal.maxWaitingRequests += waitLimit
|
||||||
|
|
||||||
if plState.queues == nil {
|
if plState.queues == nil {
|
||||||
klog.V(5).Infof("Introducing queues for priority level %q: config=%s, concurrencyLimit=%d, quiescing=%v (shares=%v, shareSum=%v)", plName, fcfmt.Fmt(plState.pl.Spec), concurrencyLimit, plState.quiescing, plState.pl.Spec.Limited.AssuredConcurrencyShares, meal.shareSum)
|
klog.V(5).Infof("Introducing queues for priority level %q: config=%s, concurrencyLimit=%d, quiescing=%v (shares=%v, shareSum=%v)", plName, fcfmt.Fmt(plState.pl.Spec), concurrencyLimit, plState.quiescing, plState.pl.Spec.Limited.NominalConcurrencyShares, meal.shareSum)
|
||||||
} else {
|
} else {
|
||||||
klog.V(5).Infof("Retaining queues for priority level %q: config=%s, concurrencyLimit=%d, quiescing=%v, numPending=%d (shares=%v, shareSum=%v)", plName, fcfmt.Fmt(plState.pl.Spec), concurrencyLimit, plState.quiescing, plState.numPending, plState.pl.Spec.Limited.AssuredConcurrencyShares, meal.shareSum)
|
klog.V(5).Infof("Retaining queues for priority level %q: config=%s, concurrencyLimit=%d, quiescing=%v, numPending=%d (shares=%v, shareSum=%v)", plName, fcfmt.Fmt(plState.pl.Spec), concurrencyLimit, plState.quiescing, plState.numPending, plState.pl.Spec.Limited.NominalConcurrencyShares, meal.shareSum)
|
||||||
}
|
}
|
||||||
plState.queues = plState.qsCompleter.Complete(fq.DispatchingConfig{ConcurrencyLimit: concurrencyLimit})
|
plState.queues = plState.qsCompleter.Complete(fq.DispatchingConfig{ConcurrencyLimit: concurrencyLimit})
|
||||||
}
|
}
|
||||||
@ -781,7 +781,7 @@ func (meal *cfgMeal) imaginePL(proto *flowcontrol.PriorityLevelConfiguration, re
|
|||||||
execSeatsObs: execSeatsObs,
|
execSeatsObs: execSeatsObs,
|
||||||
}
|
}
|
||||||
if proto.Spec.Limited != nil {
|
if proto.Spec.Limited != nil {
|
||||||
meal.shareSum += float64(proto.Spec.Limited.AssuredConcurrencyShares)
|
meal.shareSum += float64(proto.Spec.Limited.NominalConcurrencyShares)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ func TestAPFControllerWithGracefulShutdown(t *testing.T) {
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: 10,
|
NominalConcurrencyShares: 10,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
|
@ -113,7 +113,7 @@ func FmtPriorityLevelConfigurationSpec(plSpec *flowcontrol.PriorityLevelConfigur
|
|||||||
func BufferPriorityLevelConfigurationSpec(buf *bytes.Buffer, plSpec *flowcontrol.PriorityLevelConfigurationSpec) {
|
func BufferPriorityLevelConfigurationSpec(buf *bytes.Buffer, plSpec *flowcontrol.PriorityLevelConfigurationSpec) {
|
||||||
buf.WriteString(fmt.Sprintf("flowcontrolv1beta3.PriorityLevelConfigurationSpec{Type: %#v", plSpec.Type))
|
buf.WriteString(fmt.Sprintf("flowcontrolv1beta3.PriorityLevelConfigurationSpec{Type: %#v", plSpec.Type))
|
||||||
if plSpec.Limited != nil {
|
if plSpec.Limited != nil {
|
||||||
buf.WriteString(fmt.Sprintf(", Limited: &flowcontrol.LimitedPriorityLevelConfiguration{AssuredConcurrencyShares:%d, LimitResponse:flowcontrol.LimitResponse{Type:%#v", plSpec.Limited.AssuredConcurrencyShares, plSpec.Limited.LimitResponse.Type))
|
buf.WriteString(fmt.Sprintf(", Limited: &flowcontrol.LimitedPriorityLevelConfiguration{NominalConcurrencyShares:%d, LimitResponse:flowcontrol.LimitResponse{Type:%#v", plSpec.Limited.NominalConcurrencyShares, plSpec.Limited.LimitResponse.Type))
|
||||||
if plSpec.Limited.LimitResponse.Queuing != nil {
|
if plSpec.Limited.LimitResponse.Queuing != nil {
|
||||||
buf.WriteString(fmt.Sprintf(", Queuing:&%#+v", *plSpec.Limited.LimitResponse.Queuing))
|
buf.WriteString(fmt.Sprintf(", Queuing:&%#+v", *plSpec.Limited.LimitResponse.Queuing))
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ func genPL(rng *rand.Rand, name string) *flowcontrol.PriorityLevelConfiguration
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: rng.Int31n(100) + 1,
|
NominalConcurrencyShares: rng.Int31n(100) + 1,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject}}}}
|
Type: flowcontrol.LimitResponseTypeReject}}}}
|
||||||
if rng.Float32() < 0.95 {
|
if rng.Float32() < 0.95 {
|
||||||
|
@ -21,7 +21,7 @@ package v1beta3
|
|||||||
// LimitedPriorityLevelConfigurationApplyConfiguration represents an declarative configuration of the LimitedPriorityLevelConfiguration type for use
|
// LimitedPriorityLevelConfigurationApplyConfiguration represents an declarative configuration of the LimitedPriorityLevelConfiguration type for use
|
||||||
// with apply.
|
// with apply.
|
||||||
type LimitedPriorityLevelConfigurationApplyConfiguration struct {
|
type LimitedPriorityLevelConfigurationApplyConfiguration struct {
|
||||||
AssuredConcurrencyShares *int32 `json:"assuredConcurrencyShares,omitempty"`
|
NominalConcurrencyShares *int32 `json:"nominalConcurrencyShares,omitempty"`
|
||||||
LimitResponse *LimitResponseApplyConfiguration `json:"limitResponse,omitempty"`
|
LimitResponse *LimitResponseApplyConfiguration `json:"limitResponse,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,11 +31,11 @@ func LimitedPriorityLevelConfiguration() *LimitedPriorityLevelConfigurationApply
|
|||||||
return &LimitedPriorityLevelConfigurationApplyConfiguration{}
|
return &LimitedPriorityLevelConfigurationApplyConfiguration{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithAssuredConcurrencyShares sets the AssuredConcurrencyShares field in the declarative configuration to the given value
|
// WithNominalConcurrencyShares sets the NominalConcurrencyShares field in the declarative configuration to the given value
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
// If called multiple times, the AssuredConcurrencyShares field is set to the value of the last call.
|
// If called multiple times, the NominalConcurrencyShares field is set to the value of the last call.
|
||||||
func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithAssuredConcurrencyShares(value int32) *LimitedPriorityLevelConfigurationApplyConfiguration {
|
func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithNominalConcurrencyShares(value int32) *LimitedPriorityLevelConfigurationApplyConfiguration {
|
||||||
b.AssuredConcurrencyShares = &value
|
b.NominalConcurrencyShares = &value
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9346,14 +9346,14 @@ var schemaYAML = typed.YAMLObject(`types:
|
|||||||
- name: io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration
|
- name: io.k8s.api.flowcontrol.v1beta3.LimitedPriorityLevelConfiguration
|
||||||
map:
|
map:
|
||||||
fields:
|
fields:
|
||||||
- name: assuredConcurrencyShares
|
|
||||||
type:
|
|
||||||
scalar: numeric
|
|
||||||
default: 0
|
|
||||||
- name: limitResponse
|
- name: limitResponse
|
||||||
type:
|
type:
|
||||||
namedType: io.k8s.api.flowcontrol.v1beta3.LimitResponse
|
namedType: io.k8s.api.flowcontrol.v1beta3.LimitResponse
|
||||||
default: {}
|
default: {}
|
||||||
|
- name: nominalConcurrencyShares
|
||||||
|
type:
|
||||||
|
scalar: numeric
|
||||||
|
default: 0
|
||||||
- name: io.k8s.api.flowcontrol.v1beta3.NonResourcePolicyRule
|
- name: io.k8s.api.flowcontrol.v1beta3.NonResourcePolicyRule
|
||||||
map:
|
map:
|
||||||
fields:
|
fields:
|
||||||
|
@ -256,7 +256,7 @@ var _ = SIGDescribe("API priority and fairness", func() {
|
|||||||
|
|
||||||
// createPriorityLevel creates a priority level with the provided assured
|
// createPriorityLevel creates a priority level with the provided assured
|
||||||
// concurrency share.
|
// concurrency share.
|
||||||
func createPriorityLevel(f *framework.Framework, priorityLevelName string, assuredConcurrencyShares int32) (*flowcontrol.PriorityLevelConfiguration, func()) {
|
func createPriorityLevel(f *framework.Framework, priorityLevelName string, nominalConcurrencyShares int32) (*flowcontrol.PriorityLevelConfiguration, func()) {
|
||||||
createdPriorityLevel, err := f.ClientSet.FlowcontrolV1beta3().PriorityLevelConfigurations().Create(
|
createdPriorityLevel, err := f.ClientSet.FlowcontrolV1beta3().PriorityLevelConfigurations().Create(
|
||||||
context.TODO(),
|
context.TODO(),
|
||||||
&flowcontrol.PriorityLevelConfiguration{
|
&flowcontrol.PriorityLevelConfiguration{
|
||||||
@ -266,7 +266,7 @@ func createPriorityLevel(f *framework.Framework, priorityLevelName string, assur
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: assuredConcurrencyShares,
|
NominalConcurrencyShares: nominalConcurrencyShares,
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeReject,
|
Type: flowcontrol.LimitResponseTypeReject,
|
||||||
},
|
},
|
||||||
|
@ -130,7 +130,7 @@ var resetFieldsSpecData = map[schema.GroupVersionResource]string{
|
|||||||
gvr("flowcontrol.apiserver.k8s.io", "v1alpha1", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
gvr("flowcontrol.apiserver.k8s.io", "v1alpha1", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
||||||
gvr("flowcontrol.apiserver.k8s.io", "v1beta1", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
gvr("flowcontrol.apiserver.k8s.io", "v1beta1", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
||||||
gvr("flowcontrol.apiserver.k8s.io", "v1beta2", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
gvr("flowcontrol.apiserver.k8s.io", "v1beta2", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
||||||
gvr("flowcontrol.apiserver.k8s.io", "v1beta3", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"assuredConcurrencyShares": 23}}}`,
|
gvr("flowcontrol.apiserver.k8s.io", "v1beta3", "prioritylevelconfigurations"): `{"metadata": {"labels":{"a":"c"}}, "spec": {"limited": {"nominalConcurrencyShares": 23}}}`,
|
||||||
gvr("extensions", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`,
|
gvr("extensions", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`,
|
||||||
gvr("networking.k8s.io", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`,
|
gvr("networking.k8s.io", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`,
|
||||||
gvr("networking.k8s.io", "v1", "ingresses"): `{"spec": {"defaultBackend": {"service": {"name": "service2"}}}}`,
|
gvr("networking.k8s.io", "v1", "ingresses"): `{"spec": {"defaultBackend": {"service": {"name": "service2"}}}}`,
|
||||||
|
@ -237,7 +237,7 @@ func createPriorityLevelAndBindingFlowSchemaForUser(c clientset.Interface, usern
|
|||||||
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
Spec: flowcontrol.PriorityLevelConfigurationSpec{
|
||||||
Type: flowcontrol.PriorityLevelEnablementLimited,
|
Type: flowcontrol.PriorityLevelEnablementLimited,
|
||||||
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
Limited: &flowcontrol.LimitedPriorityLevelConfiguration{
|
||||||
AssuredConcurrencyShares: int32(concurrencyShares),
|
NominalConcurrencyShares: int32(concurrencyShares),
|
||||||
LimitResponse: flowcontrol.LimitResponse{
|
LimitResponse: flowcontrol.LimitResponse{
|
||||||
Type: flowcontrol.LimitResponseTypeQueue,
|
Type: flowcontrol.LimitResponseTypeQueue,
|
||||||
Queuing: &flowcontrol.QueuingConfiguration{
|
Queuing: &flowcontrol.QueuingConfiguration{
|
||||||
|
@ -324,7 +324,7 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes
|
|||||||
|
|
||||||
// k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta3
|
// k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta3
|
||||||
gvr("flowcontrol.apiserver.k8s.io", "v1beta3", "prioritylevelconfigurations"): {
|
gvr("flowcontrol.apiserver.k8s.io", "v1beta3", "prioritylevelconfigurations"): {
|
||||||
Stub: `{"metadata": {"name": "conf4"}, "spec": {"type": "Limited", "limited": {"assuredConcurrencyShares":3, "limitResponse": {"type": "Reject"}}}}`,
|
Stub: `{"metadata": {"name": "conf4"}, "spec": {"type": "Limited", "limited": {"nominalConcurrencyShares":3, "limitResponse": {"type": "Reject"}}}}`,
|
||||||
ExpectedEtcdPath: "/registry/prioritylevelconfigurations/conf4",
|
ExpectedEtcdPath: "/registry/prioritylevelconfigurations/conf4",
|
||||||
ExpectedGVK: gvkP("flowcontrol.apiserver.k8s.io", "v1beta2", "PriorityLevelConfiguration"),
|
ExpectedGVK: gvkP("flowcontrol.apiserver.k8s.io", "v1beta2", "PriorityLevelConfiguration"),
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user