vendor: revendor

Signed-off-by: Damien Grisonnet <dgrisonn@redhat.com>
This commit is contained in:
Damien Grisonnet 2021-01-21 17:40:42 +01:00
parent 61a30408f6
commit 78eec11706
14 changed files with 136 additions and 67 deletions

View file

@ -226,6 +226,17 @@ func IsZero(a corev1.ResourceList) bool {
return true return true
} }
// RemoveZeros returns a new resource list that only has no zero values
func RemoveZeros(a corev1.ResourceList) corev1.ResourceList {
result := corev1.ResourceList{}
for key, value := range a {
if !value.IsZero() {
result[key] = value
}
}
return result
}
// IsNegative returns the set of resource names that have a negative value. // IsNegative returns the set of resource names that have a negative value.
func IsNegative(a corev1.ResourceList) []corev1.ResourceName { func IsNegative(a corev1.ResourceList) []corev1.ResourceName {
results := []corev1.ResourceName{} results := []corev1.ResourceName{}

View file

@ -226,6 +226,10 @@ func (s *DelegatingAuthenticationOptions) WithClientTimeout(timeout time.Duratio
} }
func (s *DelegatingAuthenticationOptions) Validate() []error { func (s *DelegatingAuthenticationOptions) Validate() []error {
if s == nil {
return nil
}
allErrors := []error{} allErrors := []error{}
allErrors = append(allErrors, s.RequestHeader.Validate()...) allErrors = append(allErrors, s.RequestHeader.Validate()...)

View file

@ -104,8 +104,11 @@ func (s *DelegatingAuthorizationOptions) WithCustomRetryBackoff(backoff wait.Bac
} }
func (s *DelegatingAuthorizationOptions) Validate() []error { func (s *DelegatingAuthorizationOptions) Validate() []error {
allErrors := []error{} if s == nil {
return nil
}
allErrors := []error{}
if s.WebhookRetryBackoff != nil && s.WebhookRetryBackoff.Steps <= 0 { if s.WebhookRetryBackoff != nil && s.WebhookRetryBackoff.Steps <= 0 {
allErrors = append(allErrors, fmt.Errorf("number of webhook retry attempts must be greater than 1, but is: %d", s.WebhookRetryBackoff.Steps)) allErrors = append(allErrors, fmt.Errorf("number of webhook retry attempts must be greater than 1, but is: %d", s.WebhookRetryBackoff.Steps))
} }

View file

@ -37,10 +37,8 @@ var (
&compbasemetrics.HistogramOpts{ &compbasemetrics.HistogramOpts{
Name: "etcd_request_duration_seconds", Name: "etcd_request_duration_seconds",
Help: "Etcd request latency in seconds for each operation and object type.", Help: "Etcd request latency in seconds for each operation and object type.",
// Keeping it similar to the buckets used by the apiserver_request_duration_seconds metric so that // Etcd request latency in seconds for each operation and object type.
// api latency and etcd latency can be more comparable side by side. Buckets: []float64{0.005, 0.025, 0.1, 0.25, 0.5, 1.0, 2.0, 4.0, 15.0, 30.0, 60.0},
Buckets: []float64{.005, .01, .025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7,
0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40, 50, 60},
StabilityLevel: compbasemetrics.ALPHA, StabilityLevel: compbasemetrics.ALPHA,
}, },
[]string{"operation", "type"}, []string{"operation", "type"},

15
vendor/k8s.io/apiserver/pkg/util/flowcontrol/OWNERS generated vendored Normal file
View file

@ -0,0 +1,15 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- lavalamp
- deads2k
- yue9944882
- MikeSpreitzer
reviewers:
- lavalamp
- deads2k
- yue9944882
- MikeSpreitzer
labels:
- sig/api-machinery
- area/apiserver

View file

@ -34,6 +34,7 @@ import (
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
apitypes "k8s.io/apimachinery/pkg/types" apitypes "k8s.io/apimachinery/pkg/types"
apierrors "k8s.io/apimachinery/pkg/util/errors" apierrors "k8s.io/apimachinery/pkg/util/errors"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
fcboot "k8s.io/apiserver/pkg/apis/flowcontrol/bootstrap" fcboot "k8s.io/apiserver/pkg/apis/flowcontrol/bootstrap"
"k8s.io/apiserver/pkg/authentication/user" "k8s.io/apiserver/pkg/authentication/user"
@ -244,14 +245,28 @@ func (cfgCtlr *configController) updateObservations() {
} }
} }
// used from the unit tests only.
func (cfgCtlr *configController) getPriorityLevelState(plName string) *priorityLevelState {
cfgCtlr.lock.Lock()
defer cfgCtlr.lock.Unlock()
return cfgCtlr.priorityLevelStates[plName]
}
func (cfgCtlr *configController) Run(stopCh <-chan struct{}) error { func (cfgCtlr *configController) Run(stopCh <-chan struct{}) error {
defer utilruntime.HandleCrash()
// Let the config worker stop when we are done
defer cfgCtlr.configQueue.ShutDown() defer cfgCtlr.configQueue.ShutDown()
klog.Info("Starting API Priority and Fairness config controller") klog.Info("Starting API Priority and Fairness config controller")
if ok := cache.WaitForCacheSync(stopCh, cfgCtlr.plInformerSynced, cfgCtlr.fsInformerSynced); !ok { if ok := cache.WaitForCacheSync(stopCh, cfgCtlr.plInformerSynced, cfgCtlr.fsInformerSynced); !ok {
return fmt.Errorf("Never achieved initial sync") return fmt.Errorf("Never achieved initial sync")
} }
klog.Info("Running API Priority and Fairness config worker") klog.Info("Running API Priority and Fairness config worker")
wait.Until(cfgCtlr.runWorker, time.Second, stopCh) go wait.Until(cfgCtlr.runWorker, time.Second, stopCh)
<-stopCh
klog.Info("Shutting down API Priority and Fairness config worker") klog.Info("Shutting down API Priority and Fairness config worker")
return nil return nil
} }

View file

@ -112,21 +112,28 @@ func (cfgCtlr *configController) Handle(ctx context.Context, requestDigest Reque
} }
klog.V(7).Infof("Handle(%#+v) => fsName=%q, distMethod=%#+v, plName=%q, isExempt=%v, queued=%v", requestDigest, fs.Name, fs.Spec.DistinguisherMethod, pl.Name, isExempt, queued) klog.V(7).Infof("Handle(%#+v) => fsName=%q, distMethod=%#+v, plName=%q, isExempt=%v, queued=%v", requestDigest, fs.Name, fs.Spec.DistinguisherMethod, pl.Name, isExempt, queued)
var executed bool var executed bool
idle := req.Finish(func() { idle, panicking := true, true
defer func() {
klog.V(7).Infof("Handle(%#+v) => fsName=%q, distMethod=%#+v, plName=%q, isExempt=%v, queued=%v, Finish() => panicking=%v idle=%v",
requestDigest, fs.Name, fs.Spec.DistinguisherMethod, pl.Name, isExempt, queued, panicking, idle)
if idle {
cfgCtlr.maybeReap(pl.Name)
}
}()
idle = req.Finish(func() {
if queued { if queued {
metrics.ObserveWaitingDuration(pl.Name, fs.Name, strconv.FormatBool(req != nil), time.Since(startWaitingTime)) metrics.ObserveWaitingDuration(pl.Name, fs.Name, strconv.FormatBool(req != nil), time.Since(startWaitingTime))
} }
metrics.AddDispatch(pl.Name, fs.Name) metrics.AddDispatch(pl.Name, fs.Name)
executed = true executed = true
startExecutionTime := time.Now() startExecutionTime := time.Now()
execFn() defer func() {
metrics.ObserveExecutionDuration(pl.Name, fs.Name, time.Since(startExecutionTime)) metrics.ObserveExecutionDuration(pl.Name, fs.Name, time.Since(startExecutionTime))
}()
execFn()
}) })
if queued && !executed { if queued && !executed {
metrics.ObserveWaitingDuration(pl.Name, fs.Name, strconv.FormatBool(req != nil), time.Since(startWaitingTime)) metrics.ObserveWaitingDuration(pl.Name, fs.Name, strconv.FormatBool(req != nil), time.Since(startWaitingTime))
} }
klog.V(7).Infof("Handle(%#+v) => fsName=%q, distMethod=%#+v, plName=%q, isExempt=%v, queued=%v, Finish() => idle=%v", requestDigest, fs.Name, fs.Spec.DistinguisherMethod, pl.Name, isExempt, queued, idle) panicking = false
if idle {
cfgCtlr.maybeReap(pl.Name)
}
} }

View file

@ -316,8 +316,15 @@ func (req *request) Finish(execFn func()) bool {
if !exec { if !exec {
return idle return idle
} }
func() {
defer func() {
idle = req.qs.finishRequestAndDispatchAsMuchAsPossible(req)
}()
execFn() execFn()
return req.qs.finishRequestAndDispatchAsMuchAsPossible(req) }()
return idle
} }
func (req *request) wait() (bool, bool) { func (req *request) wait() (bool, bool) {

View file

@ -160,17 +160,14 @@ func (saw *sampleAndWaterMarkHistograms) SetX1(x1 float64) {
} }
func (saw *sampleAndWaterMarkHistograms) innerSet(updateXOrX1 func()) { func (saw *sampleAndWaterMarkHistograms) innerSet(updateXOrX1 func()) {
var when time.Time when, whenInt, acc, wellOrdered := func() (time.Time, int64, sampleAndWaterMarkAccumulator, bool) {
var whenInt int64
var acc sampleAndWaterMarkAccumulator
var wellOrdered bool
func() {
saw.Lock() saw.Lock()
defer saw.Unlock() defer saw.Unlock()
when = saw.clock.Now() // Moved these variables here to tiptoe around https://github.com/golang/go/issues/43570 for #97685
whenInt = saw.quantize(when) when := saw.clock.Now()
acc = saw.sampleAndWaterMarkAccumulator whenInt := saw.quantize(when)
wellOrdered = !when.Before(acc.lastSet) acc := saw.sampleAndWaterMarkAccumulator
wellOrdered := !when.Before(acc.lastSet)
updateXOrX1() updateXOrX1()
saw.relX = saw.x / saw.x1 saw.relX = saw.x / saw.x1
if wellOrdered { if wellOrdered {
@ -195,6 +192,7 @@ func (saw *sampleAndWaterMarkHistograms) innerSet(updateXOrX1 func()) {
} else if saw.relX > saw.hiRelX { } else if saw.relX > saw.hiRelX {
saw.hiRelX = saw.relX saw.hiRelX = saw.relX
} }
return when, whenInt, acc, wellOrdered
}() }()
if !wellOrdered { if !wellOrdered {
lastSetS := acc.lastSet.String() lastSetS := acc.lastSet.String()

View file

@ -104,14 +104,14 @@ func (w *WebhookTokenAuthenticator) AuthenticateToken(ctx context.Context, token
} }
var ( var (
result *authenticationv1.TokenReview result *authenticationv1.TokenReview
err error
auds authenticator.Audiences auds authenticator.Audiences
) )
webhook.WithExponentialBackoff(ctx, w.retryBackoff, func() error { // WithExponentialBackoff will return tokenreview create error (tokenReviewErr) if any.
result, err = w.tokenReview.Create(ctx, r, metav1.CreateOptions{}) if err := webhook.WithExponentialBackoff(ctx, w.retryBackoff, func() error {
return err var tokenReviewErr error
}, webhook.DefaultShouldRetry) result, tokenReviewErr = w.tokenReview.Create(ctx, r, metav1.CreateOptions{})
if err != nil { return tokenReviewErr
}, webhook.DefaultShouldRetry); err != nil {
// An error here indicates bad configuration or an outage. Log for debugging. // An error here indicates bad configuration or an outage. Log for debugging.
klog.Errorf("Failed to make webhook authenticator request: %v", err) klog.Errorf("Failed to make webhook authenticator request: %v", err)
return nil, false, err return nil, false, err

View file

@ -192,19 +192,17 @@ func (w *WebhookAuthorizer) Authorize(ctx context.Context, attr authorizer.Attri
if entry, ok := w.responseCache.Get(string(key)); ok { if entry, ok := w.responseCache.Get(string(key)); ok {
r.Status = entry.(authorizationv1.SubjectAccessReviewStatus) r.Status = entry.(authorizationv1.SubjectAccessReviewStatus)
} else { } else {
var ( var result *authorizationv1.SubjectAccessReview
result *authorizationv1.SubjectAccessReview // WithExponentialBackoff will return SAR create error (sarErr) if any.
err error if err := webhook.WithExponentialBackoff(ctx, w.retryBackoff, func() error {
) var sarErr error
webhook.WithExponentialBackoff(ctx, w.retryBackoff, func() error { result, sarErr = w.subjectAccessReview.Create(ctx, r, metav1.CreateOptions{})
result, err = w.subjectAccessReview.Create(ctx, r, metav1.CreateOptions{}) return sarErr
return err }, webhook.DefaultShouldRetry); err != nil {
}, webhook.DefaultShouldRetry)
if err != nil {
// An error here indicates bad configuration or an outage. Log for debugging.
klog.Errorf("Failed to make webhook authorizer request: %v", err) klog.Errorf("Failed to make webhook authorizer request: %v", err)
return w.decisionOnError, "", err return w.decisionOnError, "", err
} }
r.Status = result.Status r.Status = result.Status
if shouldCache(attr) { if shouldCache(attr) {
if r.Status.Allowed { if r.Status.Allowed {

View file

@ -27,6 +27,10 @@ import (
"sigs.k8s.io/structured-merge-diff/v4/schema" "sigs.k8s.io/structured-merge-diff/v4/schema"
) )
const (
quantityResource = "io.k8s.apimachinery.pkg.api.resource.Quantity"
)
// ToSchema converts openapi definitions into a schema suitable for structured // ToSchema converts openapi definitions into a schema suitable for structured
// merge (i.e. kubectl apply v2). // merge (i.e. kubectl apply v2).
func ToSchema(models proto.Models) (*schema.Schema, error) { func ToSchema(models proto.Models) (*schema.Schema, error) {
@ -414,6 +418,9 @@ func ptr(s schema.Scalar) *schema.Scalar { return &s }
func (c *convert) VisitPrimitive(p *proto.Primitive) { func (c *convert) VisitPrimitive(p *proto.Primitive) {
a := c.top() a := c.top()
if c.currentName == quantityResource {
a.Scalar = ptr(schema.Scalar("untyped"))
} else {
switch p.Type { switch p.Type {
case proto.Integer: case proto.Integer:
a.Scalar = ptr(schema.Numeric) a.Scalar = ptr(schema.Numeric)
@ -439,6 +446,7 @@ func (c *convert) VisitPrimitive(p *proto.Primitive) {
a.Scalar = ptr(schema.Scalar("untyped")) a.Scalar = ptr(schema.Scalar("untyped"))
} }
} }
}
func (c *convert) VisitArbitrary(a *proto.Arbitrary) { func (c *convert) VisitArbitrary(a *proto.Arbitrary) {
*c.top() = untypedDef.Atom *c.top() = untypedDef.Atom

View file

@ -80,6 +80,9 @@ func ToRESTFriendlyName(name string) string {
// Example for vendored Go type: // Example for vendored Go type:
// Original full path: k8s.io/kubernetes/vendor/k8s.io/api/core/v1.Pod // Original full path: k8s.io/kubernetes/vendor/k8s.io/api/core/v1.Pod
// Canonical name: k8s.io/api/core/v1.Pod // Canonical name: k8s.io/api/core/v1.Pod
//
// Original full path: vendor/k8s.io/api/core/v1.Pod
// Canonical name: k8s.io/api/core/v1.Pod
type OpenAPICanonicalTypeNamer interface { type OpenAPICanonicalTypeNamer interface {
OpenAPICanonicalTypeName() string OpenAPICanonicalTypeName() string
} }
@ -100,6 +103,8 @@ func GetCanonicalTypeName(model interface{}) string {
path := t.PkgPath() path := t.PkgPath()
if strings.Contains(path, "/vendor/") { if strings.Contains(path, "/vendor/") {
path = path[strings.Index(path, "/vendor/")+len("/vendor/"):] path = path[strings.Index(path, "/vendor/")+len("/vendor/"):]
} else if strings.HasPrefix(path, "vendor/") {
path = strings.TrimPrefix(path, "vendor/")
} }
return path + "." + t.Name() return path + "." + t.Name()
} }

16
vendor/modules.txt vendored
View file

@ -360,7 +360,7 @@ gopkg.in/tomb.v1
gopkg.in/yaml.v2 gopkg.in/yaml.v2
# gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c # gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
gopkg.in/yaml.v3 gopkg.in/yaml.v3
# k8s.io/api v0.20.0 # k8s.io/api v0.20.2
k8s.io/api/admission/v1 k8s.io/api/admission/v1
k8s.io/api/admission/v1beta1 k8s.io/api/admission/v1beta1
k8s.io/api/admissionregistration/v1 k8s.io/api/admissionregistration/v1
@ -406,7 +406,7 @@ k8s.io/api/scheduling/v1beta1
k8s.io/api/storage/v1 k8s.io/api/storage/v1
k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1alpha1
k8s.io/api/storage/v1beta1 k8s.io/api/storage/v1beta1
# k8s.io/apimachinery v0.20.0 # k8s.io/apimachinery v0.20.2
k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/equality
k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/api/errors
k8s.io/apimachinery/pkg/api/meta k8s.io/apimachinery/pkg/api/meta
@ -459,7 +459,7 @@ k8s.io/apimachinery/pkg/version
k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/pkg/watch
k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/json
k8s.io/apimachinery/third_party/forked/golang/reflect k8s.io/apimachinery/third_party/forked/golang/reflect
# k8s.io/apiserver v0.20.0 # k8s.io/apiserver v0.20.2 => k8s.io/apiserver v0.0.0-20210121032832-b18087e841ff
k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission
k8s.io/apiserver/pkg/admission/configuration k8s.io/apiserver/pkg/admission/configuration
k8s.io/apiserver/pkg/admission/initializer k8s.io/apiserver/pkg/admission/initializer
@ -583,7 +583,7 @@ k8s.io/apiserver/plugin/pkg/audit/truncate
k8s.io/apiserver/plugin/pkg/audit/webhook k8s.io/apiserver/plugin/pkg/audit/webhook
k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/webhook
k8s.io/apiserver/plugin/pkg/authorizer/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook
# k8s.io/client-go v0.20.0 # k8s.io/client-go v0.20.2
k8s.io/client-go/discovery k8s.io/client-go/discovery
k8s.io/client-go/dynamic k8s.io/client-go/dynamic
k8s.io/client-go/dynamic/fake k8s.io/client-go/dynamic/fake
@ -758,7 +758,7 @@ k8s.io/client-go/util/flowcontrol
k8s.io/client-go/util/homedir k8s.io/client-go/util/homedir
k8s.io/client-go/util/keyutil k8s.io/client-go/util/keyutil
k8s.io/client-go/util/workqueue k8s.io/client-go/util/workqueue
# k8s.io/component-base v0.20.0 # k8s.io/component-base v0.20.2
k8s.io/component-base/cli/flag k8s.io/component-base/cli/flag
k8s.io/component-base/featuregate k8s.io/component-base/featuregate
k8s.io/component-base/logs k8s.io/component-base/logs
@ -779,7 +779,7 @@ k8s.io/gengo/parser
k8s.io/gengo/types k8s.io/gengo/types
# k8s.io/klog/v2 v2.4.0 # k8s.io/klog/v2 v2.4.0
k8s.io/klog/v2 k8s.io/klog/v2
# k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd # k8s.io/kube-openapi v0.0.0-20210113233702-8566a335510f
k8s.io/kube-openapi/cmd/openapi-gen k8s.io/kube-openapi/cmd/openapi-gen
k8s.io/kube-openapi/cmd/openapi-gen/args k8s.io/kube-openapi/cmd/openapi-gen/args
k8s.io/kube-openapi/pkg/builder k8s.io/kube-openapi/pkg/builder
@ -791,7 +791,7 @@ k8s.io/kube-openapi/pkg/schemaconv
k8s.io/kube-openapi/pkg/util k8s.io/kube-openapi/pkg/util
k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/util/proto
k8s.io/kube-openapi/pkg/util/sets k8s.io/kube-openapi/pkg/util/sets
# k8s.io/metrics v0.20.0 # k8s.io/metrics v0.20.2
k8s.io/metrics/pkg/apis/custom_metrics k8s.io/metrics/pkg/apis/custom_metrics
k8s.io/metrics/pkg/apis/custom_metrics/install k8s.io/metrics/pkg/apis/custom_metrics/install
k8s.io/metrics/pkg/apis/custom_metrics/v1beta1 k8s.io/metrics/pkg/apis/custom_metrics/v1beta1
@ -802,7 +802,7 @@ k8s.io/metrics/pkg/apis/external_metrics/v1beta1
k8s.io/metrics/pkg/apis/metrics k8s.io/metrics/pkg/apis/metrics
k8s.io/metrics/pkg/apis/metrics/install k8s.io/metrics/pkg/apis/metrics/install
k8s.io/metrics/pkg/apis/metrics/v1beta1 k8s.io/metrics/pkg/apis/metrics/v1beta1
# k8s.io/sample-apiserver v0.20.0 # k8s.io/sample-apiserver v0.20.2
k8s.io/sample-apiserver/pkg/apis/wardle k8s.io/sample-apiserver/pkg/apis/wardle
k8s.io/sample-apiserver/pkg/apis/wardle/install k8s.io/sample-apiserver/pkg/apis/wardle/install
k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1 k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1