Closed mauri870 closed 2 months ago
Describe the enhancement:
In Go 1.22 we got a new package math/rand/v2 that replaces the aging math/rand.
Some improvements include better performance and scalability as well as safer algorithms. See Evolving the Go Standard Library with math/rand/v2.
Since our go.mod file requires go1.22.4 minimum we can safely depend on this new package.
What is the definition of done?
All occurrences of math/rand are replaced with math/rand/v2.
Grepping for math/rand usage I got:
$ rg -l '"math/rand"' | xargs rg 'rand\.' main.go 39: rand.Seed(time.Now().UnixNano()) internal/pkg/scheduler/scheduler.go 133: return time.Duration(rand.Int63n(t)) magefile.go 2109: bkpName := fmt.Sprintf("./env.sh-%d", rand.Int()) internal/pkg/remote/client.go 267: rand.Shuffle(len(clients), func(i, j int) { internal/pkg/core/backoff/equal_jitter.go 33: nextRand: time.Duration(rand.Int63n(int64(init))), //nolint:gosec 54: b.nextRand = time.Duration(rand.Int63n(int64(b.duration))) testing/integration/install_test.go 337: rand.Seed(time.Now().UnixNano()) 342: runes[i] = letters[rand.Intn(len(letters))] internal/pkg/agent/cmd/enroll_cmd.go 707: t := time.NewTimer(time.Duration(rand.Int63n(int64(d)))) internal/pkg/agent/application/upgrade/marker_access_test.go 162: rune := chars[rand.Intn(len(chars))] internal/pkg/agent/application/upgrade/artifact/download/http/verifier_test.go 114: first := rand.Intn(len(tt)) 115: second := rand.Intn(len(tt))
rand.Seed(time.Now().UnixNano())
rand.Int
rand.Intn
rand.IntN
rand.Int63n(x)
rand.N(x)
rand.Shuffle
Pinging @elastic/elastic-agent (Team:Elastic-Agent)
Describe the enhancement:
In Go 1.22 we got a new package math/rand/v2 that replaces the aging math/rand.
Some improvements include better performance and scalability as well as safer algorithms. See Evolving the Go Standard Library with math/rand/v2.
Since our go.mod file requires go1.22.4 minimum we can safely depend on this new package.
What is the definition of done?
All occurrences of math/rand are replaced with math/rand/v2.
Grepping for math/rand usage I got:
rand.Seed(time.Now().UnixNano())
rand.Seed is deprecated since 1.20 and removed in v2, see https://github.com/elastic/elastic-agent/pull/5334rand.Int
stays in v2, no changes needed.rand.Intn
stays in v2 asrand.IntN
rand.Int63n(x)
can now be written asrand.N(x)
as stated in the blog post.rand.Shuffle
stays the same and gains some perf improvements as stated in the blog post.