Skip to content

Commit 2a51bd8

Browse files
committed
fix: async metric recording
1 parent 7ef3cf5 commit 2a51bd8

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

pkg/scheduler/internal/queue/scheduling_queue.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ func (p *PriorityQueue) isPodWorthRequeuing(logger klog.Logger, pInfo *framework
510510
}
511511
hint = framework.Queue
512512
}
513-
metrics.QueueingHintExecutionDuration.WithLabelValues(hintfn.PluginName, event.Label, queueingHintToLabel(hint, err)).Observe(metrics.SinceInSeconds(start))
513+
p.metricsRecorder.ObserveQueueingHintDurationAsync(hintfn.PluginName, event.Label, queueingHintToLabel(hint, err), metrics.SinceInSeconds(start))
514514

515515
if hint == framework.QueueSkip {
516516
continue

pkg/scheduler/metrics/metric_recorder.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,19 @@ func NewMetricsAsyncRecorder(bufferSize int, interval time.Duration, stopCh <-ch
119119
// ObservePluginDurationAsync observes the plugin_execution_duration_seconds metric.
120120
// The metric will be flushed to Prometheus asynchronously.
121121
func (r *MetricAsyncRecorder) ObservePluginDurationAsync(extensionPoint, pluginName, status string, value float64) {
122+
r.observeMetricAsync(PluginExecutionDuration, value, pluginName, extensionPoint, status)
123+
}
124+
125+
// ObserveQueueingHintDurationAsync observes the queueing_hint_execution_duration_seconds metric.
126+
// The metric will be flushed to Prometheus asynchronously.
127+
func (r *MetricAsyncRecorder) ObserveQueueingHintDurationAsync(pluginName, event, hint string, value float64) {
128+
r.observeMetricAsync(queueingHintExecutionDuration, value, pluginName, event, hint)
129+
}
130+
131+
func (r *MetricAsyncRecorder) observeMetricAsync(m *metrics.HistogramVec, value float64, labelsValues ...string) {
122132
newMetric := &metric{
123-
metric: PluginExecutionDuration,
124-
labelValues: []string{pluginName, extensionPoint, status},
133+
metric: m,
134+
labelValues: labelsValues,
125135
value: value,
126136
}
127137
select {

pkg/scheduler/metrics/metrics.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,11 @@ var (
207207
[]string{"plugin", "extension_point", "status"})
208208

209209
// This is only available when the QHint feature gate is enabled.
210-
QueueingHintExecutionDuration = metrics.NewHistogramVec(
210+
queueingHintExecutionDuration = metrics.NewHistogramVec(
211211
&metrics.HistogramOpts{
212212
Subsystem: SchedulerSubsystem,
213213
Name: "queueing_hint_execution_duration_seconds",
214-
Help: "Duration for running a queueing hint from a plugin.",
214+
Help: "Duration for running a queueing hint function of a plugin.",
215215
// Start with 0.01ms with the last bucket being [~22ms, Inf). We use a small factor (1.5)
216216
// so that we have better granularity since plugin latency is very sensitive.
217217
Buckets: metrics.ExponentialBuckets(0.00001, 1.5, 20),
@@ -291,7 +291,7 @@ func Register() {
291291
registerMetrics.Do(func() {
292292
RegisterMetrics(metricsList...)
293293
if utilfeature.DefaultFeatureGate.Enabled(features.SchedulerQueueingHints) {
294-
RegisterMetrics(QueueingHintExecutionDuration)
294+
RegisterMetrics(queueingHintExecutionDuration)
295295
}
296296
volumebindingmetrics.RegisterVolumeSchedulingMetrics()
297297
})

0 commit comments

Comments
 (0)