Suppress AlreadyRegisteredError to fix test retries (#16501)

* Suppress AlreadyRegisteredError to fix test retries

* Remove duplicate sink
This commit is contained in:
Chris S. Kim 2023-03-02 12:08:03 -05:00 committed by GitHub
parent e0a543d2a3
commit 7d4c7efe0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 3 deletions

View File

@ -14,6 +14,7 @@ import (
"github.com/armon/go-metrics/prometheus" "github.com/armon/go-metrics/prometheus"
"github.com/hashicorp/go-hclog" "github.com/hashicorp/go-hclog"
"github.com/hashicorp/go-multierror" "github.com/hashicorp/go-multierror"
prometheuscore "github.com/prometheus/client_golang/prometheus"
"github.com/hashicorp/consul/lib/retry" "github.com/hashicorp/consul/lib/retry"
) )
@ -258,7 +259,7 @@ func dogstatdSink(cfg TelemetryConfig, hostname string) (metrics.MetricSink, err
return sink, nil return sink, nil
} }
func prometheusSink(cfg TelemetryConfig, hostname string) (metrics.MetricSink, error) { func prometheusSink(cfg TelemetryConfig, _ string) (metrics.MetricSink, error) {
if cfg.PrometheusOpts.Expiration.Nanoseconds() < 1 { if cfg.PrometheusOpts.Expiration.Nanoseconds() < 1 {
return nil, nil return nil, nil
@ -266,12 +267,19 @@ func prometheusSink(cfg TelemetryConfig, hostname string) (metrics.MetricSink, e
sink, err := prometheus.NewPrometheusSinkFrom(cfg.PrometheusOpts) sink, err := prometheus.NewPrometheusSinkFrom(cfg.PrometheusOpts)
if err != nil { if err != nil {
// During testing we may try to register the same metrics collector
// multiple times in a single run (e.g. a metrics test fails and
// we attempt a retry), resulting in an AlreadyRegisteredError.
// Suppress this and move on.
if errors.As(err, &prometheuscore.AlreadyRegisteredError{}) {
return nil, nil
}
return nil, err return nil, err
} }
return sink, nil return sink, nil
} }
func circonusSink(cfg TelemetryConfig, hostname string) (metrics.MetricSink, error) { func circonusSink(cfg TelemetryConfig, _ string) (metrics.MetricSink, error) {
token := cfg.CirconusAPIToken token := cfg.CirconusAPIToken
url := cfg.CirconusSubmissionURL url := cfg.CirconusSubmissionURL
if token == "" && url == "" { if token == "" && url == "" {
@ -337,7 +345,6 @@ func configureSinks(cfg TelemetryConfig, memSink metrics.MetricSink) (metrics.Fa
addSink(statsdSink) addSink(statsdSink)
addSink(dogstatdSink) addSink(dogstatdSink)
addSink(circonusSink) addSink(circonusSink)
addSink(circonusSink)
addSink(prometheusSink) addSink(prometheusSink)
if len(sinks) > 0 { if len(sinks) > 0 {