Skip to content

Commit d2db6af

Browse files
committed
fix(metrics): fix race condition in metrics.Init()
IterationMetricsEnabled can be concurrently set ``` ================== WARNING: DATA RACE Write at 0x00c000124098 by goroutine 12: github.com/form3tech-oss/f1/v2/internal/metrics.Init() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics.go:82 +0x7c github.com/form3tech-oss/f1/v2/internal/metrics_test.TestMetrics_Init_IsSafe.func1() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics_test.go:15 +0x20 Previous write at 0x00c000124098 by goroutine 14: github.com/form3tech-oss/f1/v2/internal/metrics.Init() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics.go:82 +0x7c github.com/form3tech-oss/f1/v2/internal/metrics_test.TestMetrics_Init_IsSafe.func1() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics_test.go:15 +0x20 Goroutine 12 (running) created at: github.com/form3tech-oss/f1/v2/internal/metrics_test.TestMetrics_Init_IsSafe() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics_test.go:14 +0xa4 testing.tRunner() /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184 testing.(*T).Run.gowrap1() /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40 Goroutine 14 (finished) created at: github.com/form3tech-oss/f1/v2/internal/metrics_test.TestMetrics_Init_IsSafe() /Users/nikolayvladimirov/go/src/github.com/form3tech-oss/f1/internal/metrics/metrics_test.go:14 +0xa4 testing.tRunner() /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184 testing.(*T).Run.gowrap1() /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40 ```
1 parent f016ea2 commit d2db6af

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

internal/metrics/metrics.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func Init(iterationMetricsEnabled bool) {
7979
}
8080
m = NewInstance(defaultRegistry, iterationMetricsEnabled)
8181
})
82-
m.IterationMetricsEnabled = iterationMetricsEnabled
8382
}
8483

8584
func Instance() *Metrics {

internal/metrics/metrics_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package metrics_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
8+
"github.com/form3tech-oss/f1/v2/internal/metrics"
9+
)
10+
11+
func TestMetrics_Init_IsSafe(t *testing.T) {
12+
t.Parallel()
13+
14+
metrics.Init(true)
15+
16+
// race detector assertion
17+
for range 10 {
18+
go func() {
19+
metrics.Init(false)
20+
}()
21+
}
22+
23+
assert.True(t, metrics.Instance().IterationMetricsEnabled)
24+
}

0 commit comments

Comments
 (0)