Upgrade from math/rand to math/rand/v2#1788
Upgrade from math/rand to math/rand/v2#1788Onyx2406 wants to merge 2 commits intoClickHouse:mainfrom
Conversation
Migrate all usages of the deprecated math/rand package to math/rand/v2 across the codebase. This fixes the Go 1.25 compatibility issue where rand.Seed no longer works (ClickHouse#1652). Key changes: - Replace math/rand imports with math/rand/v2 in all 19 affected files - Use rand.IntN instead of rand.Intn (v2 naming convention) - Replace rand.NewSource with rand.NewPCG for local random generators - Remove all rand.Seed calls (v2 auto-seeds the global source) - Fix ConnOpenRandom strategy: pick random offset once outside the loop instead of on every iteration, ensuring all addresses are tried before failing over - Re-enable TestConnFailoverRandom and TestStdConnFailoverRandom tests that were skipped due to Go 1.25 math/random changes Fixes ClickHouse#1653
SummaryThis PR migrates the codebase from Should fix
The PR hoists The Fix: either add a Nits
VerdictRequest changes |
Summary
math/randusages tomath/rand/v2across the entire codebase (19 files)ConnOpenRandomstrategy to pick random offset once outside the loopMotivation
Go 1.25 broke
rand.Seedwhich causedConnOpenRandomfailover tests to be skipped (#1652). Themath/randpackage is deprecated in favor ofmath/rand/v2which provides automatic seeding and better APIs.As discussed in #1653, the
ConnOpenRandomstrategy also had a bug whererand.Int()was called on every loop iteration, meaning a connection attempt could pick the same (broken) address multiple times and fail to try all addresses.Changes
Core library (
clickhouse.go,clickhouse_std.go):math/randwithmath/rand/v2ConnOpenRandom: pick random starting offset once viarand.IntN(len(addrs))before the loop, then iterate through all addresses deterministically from that offset. This ensures every address is tried exactly once before failing.Tests (11 files):
rand.NewSource/rand.Newwithrand.NewPCG/rand.Newrand.Intn(n)withrand.IntN(n)(v2 naming)src.Int63()withrng.Int64()in string generatorsrand.Seedcalls (v2 auto-seeds)TestConnFailoverRandomandTestStdConnFailoverRandomExamples (5 files):
rand.Seedcalls from multi-host and test setupResetRandSeed()to no-op (v2 has norand.Seed)time,math/rand)Test Plan
go build ./...passes cleanlymath/randv1 imports (grepconfirms zero matches)TestConnFailoverRandomandTestStdConnFailoverRandomre-enabled (previously skipped)Fixes #1653