From 379971ca50975ca36a6d8aefcf5dabb5134cbfbf Mon Sep 17 00:00:00 2001 From: Alexey Mukas Date: Thu, 30 Jun 2022 19:18:50 +0200 Subject: [PATCH] fix collection --- prometheus/collector_metric.go | 14 ++++++++++++-- prometheus/registry.go | 8 ++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/prometheus/collector_metric.go b/prometheus/collector_metric.go index a81fa365f..25c8aaabc 100644 --- a/prometheus/collector_metric.go +++ b/prometheus/collector_metric.go @@ -13,6 +13,10 @@ package prometheus +import ( + "log" +) + const ( metricsBufferSize = 1024 * 8 ) @@ -38,7 +42,12 @@ func NewMetaMetricsCollector() *MetaMetrics { } func (m *MetaMetrics) Add(metric Metric) { - m.cache <- metric + select { + case m.cache <- metric: + default: + log.Println("MetaMetrics blocked") + } + } func (m *MetaMetrics) Describe(ch chan<- *Desc) { @@ -46,12 +55,13 @@ func (m *MetaMetrics) Describe(ch chan<- *Desc) { } func (m *MetaMetrics) Collect(ch chan<- Metric) { +collect: for { select { case metric := <-m.cache: ch <- metric default: - break + break collect } } } diff --git a/prometheus/registry.go b/prometheus/registry.go index 2aba755fd..00736d9cc 100644 --- a/prometheus/registry.go +++ b/prometheus/registry.go @@ -447,9 +447,9 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) { wg.Add(goroutineBudget) + var metaMetricCollector Collector collectWorker := func() { for { - var metaMetricCollector Collector select { case collector := <-checkedCollectors: if _, ok := collector.(*MetaMetrics); ok { @@ -460,9 +460,6 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) { case collector := <-uncheckedCollectors: collector.Collect(uncheckedMetricChan) default: - if metaMetricCollector != nil { - metaMetricCollector.Collect(checkedMetricChan) - } return } wg.Done() @@ -477,6 +474,9 @@ func (r *Registry) Gather() ([]*dto.MetricFamily, error) { // are collected. go func() { wg.Wait() + if metaMetricCollector != nil { + metaMetricCollector.Collect(checkedMetricChan) + } close(checkedMetricChan) close(uncheckedMetricChan) }()