diff --git a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go index 92b8f74a8ea..03e98d2a8a9 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go +++ b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go @@ -800,6 +800,7 @@ func (qs *queueSet) findDispatchQueueLocked() (*queue, *request) { klogV.Infof("QS(%s): request %v %v seats %d cannot be dispatched from queue %d, waiting for currently executing requests to complete, %d requests are occupying %d seats and the limit is %d", qs.qCfg.Name, oldestReqFromMinQueue.descr1, oldestReqFromMinQueue.descr2, oldestReqFromMinQueue.MaxSeats(), minQueue.index, qs.totRequestsExecuting, qs.totSeatsInUse, qs.dCfg.ConcurrencyLimit) } + metrics.AddDispatchWithNoAccommodation(qs.qCfg.Name, oldestReqFromMinQueue.fsName) return nil, nil } oldestReqFromMinQueue.removeFromQueueLocked() diff --git a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go index aee65fc1021..f52b569b2bb 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go @@ -324,6 +324,16 @@ var ( }, []string{priorityLevel, flowSchema}, ) + apiserverDispatchWithNoAccommodation = compbasemetrics.NewCounterVec( + &compbasemetrics.CounterOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "request_dispatch_no_accommodation_total", + Help: "Number of times a dispatch attempt resulted in a non accommodation due to lack of available seats", + StabilityLevel: compbasemetrics.ALPHA, + }, + []string{priorityLevel, flowSchema}, + ) metrics = Registerables{ apiserverRejectedRequestsTotal, @@ -343,6 +353,7 @@ var ( watchCountSamples, apiserverEpochAdvances, apiserverWorkEstimatedSeats, + apiserverDispatchWithNoAccommodation, }. Append(PriorityLevelExecutionSeatsObserverGenerator.metrics()...). Append(PriorityLevelConcurrencyObserverPairGenerator.metrics()...). @@ -428,3 +439,9 @@ func AddEpochAdvance(ctx context.Context, priorityLevel string, success bool) { func ObserveWorkEstimatedSeats(priorityLevel, flowSchema string, seats int) { apiserverWorkEstimatedSeats.WithLabelValues(priorityLevel, flowSchema).Observe(float64(seats)) } + +// AddDispatchWithNoAccommodation keeps track of number of times dispatch attempt results +// in a non accommodation due to lack of available seats. +func AddDispatchWithNoAccommodation(priorityLevel, flowSchema string) { + apiserverDispatchWithNoAccommodation.WithLabelValues(priorityLevel, flowSchema).Inc() +}