client_golang/prometheus
Tiago Silva 59c00e3e9c
Fix data-race in metric without code and method but with `WithLabelFromCtx` (#1318)
This commit fixes a data race that exists when the metric used in any
`promhttp` middleware doesn't collect the `code` and `method` but uses
`WithLabelFromCtx` to collect values from context.

The problem happens because when no `code` and `method` tags are
collected, the `labels` function returns a pre-initialized map
`emptyLabels` for every request.

When one or multipe `WithLabelFromCtx` options are configured, the
returned map from the `labels` function call is used to collect the
metrics from context which creates a multi-write data race.

Signed-off-by: Tiago Silva <tiago.silva@goteleport.com>
2023-08-01 17:11:17 +01:00
..
collectors [collectors]: fix typo in test assertion (#1153) 2023-04-17 21:35:49 +01:00
graphite Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
internal Test and support 1.19 (#1160) 2022-11-08 00:14:19 +01:00
promauto Indent example in godoc consistently (#1226) 2023-03-01 16:45:01 +00:00
promhttp Fix data-race in metric without code and method but with `WithLabelFromCtx` (#1318) 2023-08-01 17:11:17 +01:00
push Add `Header` method to Pusher for custom header (#1218) 2023-02-07 16:16:37 +01:00
testutil Improve metricUnits runtime (#1286) 2023-06-08 11:35:32 +01:00
.gitignore Rearrange file and package per convention. 2013-04-04 15:27:09 +02:00
README.md Update status badgets 2021-06-23 10:12:43 +02:00
benchmark_test.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
build_info_collector.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
collector.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
collector_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
counter.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
counter_test.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
desc.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
desc_test.go Add missing license headers 2018-08-22 13:53:56 +02:00
doc.go Indent example in godoc consistently (#1226) 2023-03-01 16:45:01 +00:00
example_clustermanager_test.go Nitpicking a doc comment 2018-11-20 13:41:38 +01:00
example_metricvec_test.go Cleanup proto use in tests (#1264) 2023-05-03 09:46:41 +01:00
example_timer_complex_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
example_timer_gauge_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
example_timer_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
examples_test.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
expvar_collector.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
expvar_collector_test.go Simplify if expr in ExampleNewExpvarCollector() 2018-04-13 23:23:52 +02:00
fnv.go Add missing license headers 2018-08-22 13:53:56 +02:00
gauge.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
gauge_test.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
gen_go_collector_metrics_set.go Added support for go 1.20. (#1234) 2023-03-21 13:46:37 +00:00
get_pid.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
get_pid_gopherjs.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
go_collector.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
go_collector_go116.go gocollector: Added options to Go Collector for changing the (#1031) 2022-04-13 09:55:22 +01:00
go_collector_go116_test.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
go_collector_latest.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
go_collector_latest_test.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
go_collector_metrics_go117_test.go Remove -Inf buckets from go collector histograms (#1049) 2022-05-13 10:04:45 +02:00
go_collector_metrics_go118_test.go Remove -Inf buckets from go collector histograms (#1049) 2022-05-13 10:04:45 +02:00
go_collector_metrics_go119_test.go Generate new Go runtime metrics for go 1.19 (#1105) 2022-08-05 15:48:33 +02:00
go_collector_metrics_go120_test.go Added support for go 1.20. (#1234) 2023-03-21 13:46:37 +00:00
go_collector_test.go Use simpler locking in the Go 1.17 collector (#975) 2022-01-25 08:43:45 +01:00
histogram.go histogram: Add a no-op span for an otherwise empty histogram 2023-07-20 17:34:00 +02:00
histogram_test.go histogram: Add a no-op span for an otherwise empty histogram 2023-07-20 17:34:00 +02:00
labels.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
metric.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
metric_test.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
num_threads.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
num_threads_gopherjs.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
observer.go Update documentation for exemplar label limit (#1095) 2022-07-27 17:45:49 +02:00
process_collector.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_js.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_other.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_test.go Add new go:build lines for go 1.17 2021-12-17 23:38:35 +01:00
process_collector_windows.go feat: Change processMemoryCounters struct uint declaration to uintptr 2020-04-13 10:44:09 +08:00
process_collector_windows_test.go Implement process collector for Windows (#596) 2019-06-14 12:26:55 +02:00
registry.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
registry_test.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
summary.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
summary_test.go fix tests warning about string(int) type conversions 2020-07-06 21:19:31 +09:00
timer.go timer: Added support for exemplars. (#1233) 2023-03-21 19:35:31 +00:00
timer_test.go timer: Added support for exemplars. (#1233) 2023-03-21 19:35:31 +00:00
untyped.go Remove the deprecated uses of Untyped metrics 2017-08-29 17:31:45 +02:00
value.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
value_test.go Add missing license headers 2018-08-22 13:53:56 +02:00
vec.go Do not allocate memory when there's no constraints (#1296) 2023-06-27 12:21:36 +01:00
vec_test.go Reduce constrainLabels allocations (#1272) 2023-06-07 08:39:02 +01:00
vnext.go Add constrained labels and Constrained variant for all MetricVecs (#1151) 2022-12-13 13:47:52 +01:00
wrap.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00
wrap_test.go Replace deprecated github.com/golang/protobuf package (#1183) 2022-12-22 16:14:00 +01:00

README.md

See Go Reference.