diff --git a/pebble/cmd/pebble/queue.go b/pebble/cmd/pebble/queue.go index 71937411a..6ac4fc48e 100644 --- a/pebble/cmd/pebble/queue.go +++ b/pebble/cmd/pebble/queue.go @@ -7,6 +7,7 @@ package main import ( "fmt" "log" + rand "math/rand/v2" "sync" "sync/atomic" "time" @@ -14,7 +15,6 @@ import ( "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/internal/randvar" "github.com/spf13/cobra" - "golang.org/x/exp/rand" ) var queueConfig struct { @@ -42,7 +42,7 @@ func queueTest() (test, *atomic.Int64) { init: func(d DB, wg *sync.WaitGroup) { var ( value []byte - rng = rand.New(rand.NewSource(1449168817)) + rng = rand.New(rand.NewPCG(0, 1449168817)) queue = make([][]byte, queueConfig.size) ) for i := 0; i < queueConfig.size; i++ { diff --git a/pebble/cmd/pebble/scan.go b/pebble/cmd/pebble/scan.go index 0803501fb..b546b20b8 100644 --- a/pebble/cmd/pebble/scan.go +++ b/pebble/cmd/pebble/scan.go @@ -8,6 +8,7 @@ import ( "fmt" "log" "math" + rand "math/rand/v2" "sync" "sync/atomic" "time" @@ -15,7 +16,6 @@ import ( "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/internal/randvar" "github.com/spf13/cobra" - "golang.org/x/exp/rand" ) var scanConfig struct { @@ -65,7 +65,7 @@ func runScan(cmd *cobra.Command, args []string) { const count = 100000 const batch = 1000 - rng := rand.New(rand.NewSource(1449168817)) + rng := rand.New(rand.NewPCG(0, 1449168817)) keys := make([][]byte, count) for i := 0; i < count; { @@ -94,7 +94,7 @@ func runScan(cmd *cobra.Command, args []string) { go func(i int) { defer wg.Done() - rng := rand.New(rand.NewSource(uint64(i))) + rng := rand.New(rand.NewPCG(0, uint64(i))) startKeyBuf := append(make([]byte, 0, 64), []byte("key-")...) endKeyBuf := append(make([]byte, 0, 64), []byte("key-")...) minTS := encodeUint64Ascending(nil, math.MaxUint64) @@ -103,7 +103,7 @@ func runScan(cmd *cobra.Command, args []string) { wait(limiter) rows := int(rowDist.Uint64(rng)) - startIdx := rng.Int31n(int32(len(keys) - rows)) + startIdx := rng.Int32N(int32(len(keys) - rows)) startKey := encodeUint32Ascending(startKeyBuf[:4], uint32(startIdx)) endKey := encodeUint32Ascending(endKeyBuf[:4], uint32(startIdx+int32(rows))) diff --git a/pebble/cmd/pebble/sync.go b/pebble/cmd/pebble/sync.go index e2add2638..ec923f78c 100644 --- a/pebble/cmd/pebble/sync.go +++ b/pebble/cmd/pebble/sync.go @@ -7,6 +7,7 @@ package main import ( "fmt" "log" + rand "math/rand/v2" "sync" "sync/atomic" "time" @@ -14,7 +15,6 @@ import ( "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/internal/randvar" "github.com/spf13/cobra" - "golang.org/x/exp/rand" ) var syncConfig struct { @@ -66,7 +66,7 @@ func runSync(cmd *cobra.Command, args []string) { go func() { defer wg.Done() - rand := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rand := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) var raw []byte var buf []byte var block []byte diff --git a/pebble/cmd/pebble/tombstone.go b/pebble/cmd/pebble/tombstone.go index bbe0e3bc2..469213fbd 100644 --- a/pebble/cmd/pebble/tombstone.go +++ b/pebble/cmd/pebble/tombstone.go @@ -67,9 +67,6 @@ func runTombstoneCmd(cmd *cobra.Command, args []string) error { batchDist := ycsbConfig.batch scanDist := ycsbConfig.scans - if err != nil { - return err - } valueDist := ycsbConfig.values y := newYcsb(weights, keyDist, batchDist, scanDist, valueDist) diff --git a/pebble/cmd/pebble/ycsb.go b/pebble/cmd/pebble/ycsb.go index 41de324e1..6e4a8ab29 100644 --- a/pebble/cmd/pebble/ycsb.go +++ b/pebble/cmd/pebble/ycsb.go @@ -7,6 +7,7 @@ package main import ( "fmt" "log" + "math/rand/v2" "strconv" "strings" "sync" @@ -19,7 +20,6 @@ import ( "github.com/cockroachdb/pebble/internal/randvar" "github.com/cockroachdb/pebble/internal/rate" "github.com/spf13/cobra" - "golang.org/x/exp/rand" ) const ( @@ -225,9 +225,6 @@ func runYcsb(cmd *cobra.Command, args []string) error { batchDist := ycsbConfig.batch scanDist := ycsbConfig.scans - if err != nil { - return err - } valueDist := ycsbConfig.values y := newYcsb(weights, keyDist, batchDist, scanDist, valueDist) diff --git a/pebble/commit_test.go b/pebble/commit_test.go index 51b618d67..3f14e5322 100644 --- a/pebble/commit_test.go +++ b/pebble/commit_test.go @@ -8,6 +8,7 @@ import ( "encoding/binary" "fmt" "io" + "math/rand/v2" "sync" "sync/atomic" "testing" @@ -19,7 +20,6 @@ import ( "github.com/cockroachdb/pebble/vfs" "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) type testCommitEnv struct { @@ -331,7 +331,7 @@ func BenchmarkCommitPipeline(b *testing.B) { b.ResetTimer() b.RunParallel(func(pb *testing.PB) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) buf := make([]byte, keySize) for pb.Next() { diff --git a/pebble/db_test.go b/pebble/db_test.go index 631753df9..6ca611ec6 100644 --- a/pebble/db_test.go +++ b/pebble/db_test.go @@ -9,6 +9,7 @@ import ( "context" "fmt" "io" + "math/rand/v2" "path/filepath" "slices" "strconv" @@ -25,7 +26,6 @@ import ( "github.com/cockroachdb/pebble/sstable" "github.com/cockroachdb/pebble/vfs" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) // try repeatedly calls f, sleeping between calls with exponential back-off, @@ -311,12 +311,12 @@ func TestRandomWrites(t *testing.T) { } xxx := bytes.Repeat([]byte("x"), 512) - rng := rand.New(rand.NewSource(123)) + rng := rand.New(rand.NewPCG(0, 123)) const N = 1000 for i := 0; i < N; i++ { - k := rng.Intn(len(keys)) - if rng.Intn(20) != 0 { - wants[k] = rng.Intn(len(xxx) + 1) + k := rng.IntN(len(keys)) + if rng.IntN(20) != 0 { + wants[k] = rng.IntN(len(xxx) + 1) if err := d.Set(keys[k], xxx[:wants[k]], nil); err != nil { t.Fatalf("i=%d: Set: %v", i, err) } @@ -327,7 +327,7 @@ func TestRandomWrites(t *testing.T) { } } - if i != N-1 || rng.Intn(50) != 0 { + if i != N-1 || rng.IntN(50) != 0 { continue } for k := range keys { @@ -930,7 +930,7 @@ func TestFlushEmpty(t *testing.T) { } func TestRollManifest(t *testing.T) { - toPreserve := rand.Int31n(5) + 1 + toPreserve := rand.Int32N(5) + 1 opts := &Options{ MaxManifestFileSize: 1, L0CompactionThreshold: 10, @@ -1846,7 +1846,7 @@ func TestMemtableIngestInversion(t *testing.T) { } func BenchmarkDelete(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) const keyCount = 10000 var keys [keyCount][]byte for i := 0; i < keyCount; i++ { diff --git a/pebble/external_iterator_test.go b/pebble/external_iterator_test.go index 77afd4dcc..ee8f3bc13 100644 --- a/pebble/external_iterator_test.go +++ b/pebble/external_iterator_test.go @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "math" + "math/rand/v2" "testing" "time" @@ -21,7 +22,6 @@ import ( "github.com/cockroachdb/pebble/sstable" "github.com/cockroachdb/pebble/vfs" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestExternalIterator(t *testing.T) { @@ -151,13 +151,13 @@ func TestIterRandomizedMaybeFilteredKeys(t *testing.T) { seed = uint64(time.Now().UnixNano()) t.Logf("seed: %d", seed) } - rng := rand.New(rand.NewSource(seed)) - numKeys := 100 + rng.Intn(5000) + rng := rand.New(rand.NewPCG(0, seed)) + numKeys := 100 + rng.IntN(5000) // The block property filter will exclude keys with suffixes [0, tsSeparator-1]. // We use the first "part" of the keyspace below to write keys >= tsSeparator, // and the second part to write keys < tsSeparator. Successive parts (if any) // will contain keys at random before or after the separator. - tsSeparator := 10 + rng.Int63n(5000) + tsSeparator := 10 + rng.Int64N(5000) const keyLen = 5 // We split the keyspace into logical "parts" which are disjoint slices of the @@ -166,8 +166,8 @@ func TestIterRandomizedMaybeFilteredKeys(t *testing.T) { // predictable clustering of timestamps in sstable blocks, however it is not // strictly necessary for this test. alpha := testkeys.Alpha(keyLen) - numParts := rng.Intn(3) + 2 - blockSize := 16 + rng.Intn(64) + numParts := rng.IntN(3) + 2 + blockSize := 16 + rng.IntN(64) c := cache.New(128 << 20) defer c.Unref() @@ -207,11 +207,11 @@ func TestIterRandomizedMaybeFilteredKeys(t *testing.T) { for j := 0; j < maxKeysPerPart; j++ { var ts int64 if i == 0 { - ts = rng.Int63n(5000) + tsSeparator + ts = rng.Int64N(5000) + tsSeparator } else if i == 1 { - ts = rng.Int63n(tsSeparator) + ts = rng.Int64N(tsSeparator) } else { - ts = rng.Int63n(tsSeparator + 5000) + ts = rng.Int64N(tsSeparator + 5000) } n := testkeys.WriteKeyAt(buf, alpha, keyIdx*alpha.Count()/int64(numKeys), ts) keys = append(keys, append([]byte(nil), buf[:n]...)) @@ -251,7 +251,7 @@ func TestIterRandomizedMaybeFilteredKeys(t *testing.T) { narrowBoundsMode := false for i := 0; i < 10000; i++ { - if rng.Intn(8) == 0 { + if rng.IntN(8) == 0 { // Toggle narrow bounds mode. if narrowBoundsMode { // Reset bounds. @@ -260,7 +260,7 @@ func TestIterRandomizedMaybeFilteredKeys(t *testing.T) { } narrowBoundsMode = !narrowBoundsMode } - keyIdx := rng.Intn(len(keys)) + keyIdx := rng.IntN(len(keys)) seekKey := keys[keyIdx] if narrowBoundsMode { // Case 1: We just entered narrow bounds mode, and both bounds diff --git a/pebble/go.mod b/pebble/go.mod index 7268898d7..6d2318dd5 100644 --- a/pebble/go.mod +++ b/pebble/go.mod @@ -1,49 +1,50 @@ module github.com/cockroachdb/pebble +replace github.com/cockroachdb/pebble => ../pebble + require ( github.com/DataDog/zstd v1.4.5 - github.com/HdrHistogram/hdrhistogram-go v1.1.2 - github.com/cespare/xxhash/v2 v2.2.0 + github.com/HdrHistogram/hdrhistogram-go v1.2.0 + github.com/cespare/xxhash/v2 v2.3.0 github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f - github.com/cockroachdb/errors v1.11.1 - github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 - github.com/cockroachdb/redact v1.1.5 - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 + github.com/cockroachdb/errors v1.12.0 + github.com/cockroachdb/metamorphic v0.0.0-20231120015718-884f2746775a + github.com/cockroachdb/redact v1.1.6 + github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 - github.com/golang/snappy v0.0.4 - github.com/guptarohit/asciigraph v0.5.5 - github.com/klauspost/compress v1.15.15 + github.com/golang/snappy v1.0.0 + github.com/guptarohit/asciigraph v0.7.3 + github.com/klauspost/compress v1.18.1 github.com/kr/pretty v0.3.1 github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 - github.com/prometheus/client_golang v1.12.0 - github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a - github.com/spf13/cobra v1.0.0 - github.com/stretchr/testify v1.8.4 - golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df - golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5 - golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 - golang.org/x/sys v0.11.0 + github.com/prometheus/client_golang v1.23.2 + github.com/prometheus/client_model v0.6.2 + github.com/spf13/cobra v1.10.1 + github.com/stretchr/testify v1.11.1 + golang.org/x/perf v0.0.0-20251112180420-cfbd823f7301 + golang.org/x/sync v0.18.0 + golang.org/x/sys v0.38.0 ) require ( - github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 // indirect + github.com/aclements/go-moremath v0.0.0-20241023150245-c8bbc672ef66 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/getsentry/sentry-go v0.18.0 // indirect + github.com/getsentry/sentry-go v0.38.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kr/text v0.2.0 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/prometheus/common v0.67.4 // indirect + github.com/prometheus/procfs v0.19.2 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/spf13/pflag v1.0.10 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect + golang.org/x/text v0.31.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -go 1.21 +go 1.24.0 diff --git a/pebble/go.sum b/pebble/go.sum index 89e7f5319..c9ea6605e 100644 --- a/pebble/go.sum +++ b/pebble/go.sum @@ -1,666 +1,126 @@ -cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= -github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 h1:xlwdaKcTNVW4PtpQb8aKA4Pjy0CdJHEqvFbAnvR5m2g= -github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/HdrHistogram/hdrhistogram-go v1.2.0 h1:XMJkDWuz6bM9Fzy7zORuVFKH7ZJY41G2q8KWhVGkNiY= +github.com/HdrHistogram/hdrhistogram-go v1.2.0/go.mod h1:CiIeGiHSd06zjX+FypuEJ5EQ07KKtxZ+8J6hszwVQig= +github.com/aclements/go-moremath v0.0.0-20241023150245-c8bbc672ef66 h1:siNQlUMcFUDZWCOt0p+RHl7et5Nnwwyq/sFZmr4iG1I= +github.com/aclements/go-moremath v0.0.0-20241023150245-c8bbc672ef66/go.mod h1:FDw7qicTbJ1y1SZcNnOvym2BogPdC3lY9Z1iUM4MVhw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA= -github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= +github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= +github.com/cockroachdb/metamorphic v0.0.0-20231120015718-884f2746775a h1:01C90sgy3XTHo67HJR2wsu0p3lp9/2VjqdEve5USE6Y= +github.com/cockroachdb/metamorphic v0.0.0-20231120015718-884f2746775a/go.mod h1:GkaZ6eP1TNDIRtMFQoSCtUr0GoKSbTjN5bsKEL+7iB8= +github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= +github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb h1:3bCgBvB8PbJVMX1ouCcSIxvsqKPYM7gs72o0zC76n9g= +github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= -github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/getsentry/sentry-go v0.38.0 h1:S8Xui7gLeAvXINVLMOaX94HnsDf1GexnfXGSNC4+KQs= +github.com/getsentry/sentry-go v0.38.0/go.mod h1:eRXCoh3uvmjQLY6qu63BjUZnaBu5L5WhMV1RwYO8W5s= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= -github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/guptarohit/asciigraph v0.5.5 h1:ccFnUF8xYIOUPPY3tmdvRyHqmn1MYI9iv1pLKX+/ZkQ= -github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/guptarohit/asciigraph v0.7.3 h1:p05XDDn7cBTWiBqWb30mrwxd6oU0claAjqeytllnsPY= +github.com/guptarohit/asciigraph v0.7.3/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= +github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= -github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= -github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc= +github.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI= +github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= +github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= -golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5 h1:ObuXPmIgI4ZMyQLIz48cJYgSyWdjUXc2SZAdyJMwEAU= -golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/perf v0.0.0-20251112180420-cfbd823f7301 h1:qKuLfh5O0Hw3QfGs43tKwsiqL8RV+034WMgSAGWW4js= +golang.org/x/perf v0.0.0-20251112180420-cfbd823f7301/go.mod h1:CObWzdfY9ZrvLE+9Ps2aVQKgF18AM8T2lj7TxN/GIXw= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3 h1:DnoIG+QAMaF5NvxnGe/oKsgKcAc6PcUyl8q0VetfQ8s= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ= -google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pebble/ingest.go b/pebble/ingest.go index 149340d5a..25b3a303a 100644 --- a/pebble/ingest.go +++ b/pebble/ingest.go @@ -1252,9 +1252,6 @@ func (d *DB) handleIngestAsFlushable(meta []*fileMetadata, seqNum uint64) error // ingestedFlushable in the flushable queue. The mutable memtable // will be created below. newLogNum, _ = d.recycleWAL() - if err != nil { - return err - } } currMem := d.mu.mem.mutable diff --git a/pebble/ingest_test.go b/pebble/ingest_test.go index c4dcc2aa3..069026989 100644 --- a/pebble/ingest_test.go +++ b/pebble/ingest_test.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "math" + "math/rand/v2" "os" "path/filepath" "slices" @@ -38,7 +39,6 @@ import ( "github.com/cockroachdb/pebble/vfs/errorfs" "github.com/kr/pretty" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestSSTableKeyCompare(t *testing.T) { @@ -147,7 +147,7 @@ func TestIngestLoad(t *testing.T) { func TestIngestLoadRand(t *testing.T) { mem := vfs.NewMem() - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) cmp := DefaultComparer.Compare version := internalFormatNewest @@ -159,7 +159,7 @@ func TestIngestLoadRand(t *testing.T) { return data } - paths := make([]string, 1+rng.Intn(10)) + paths := make([]string, 1+rng.IntN(10)) pending := make([]base.DiskFileNum, len(paths)) expected := make([]*fileMetadata, len(paths)) for i := range paths { @@ -174,10 +174,10 @@ func TestIngestLoadRand(t *testing.T) { f, err := mem.Create(paths[i]) require.NoError(t, err) - keys := make([]InternalKey, 1+rng.Intn(100)) + keys := make([]InternalKey, 1+rng.IntN(100)) for i := range keys { keys[i] = base.MakeInternalKey( - randBytes(1+rng.Intn(10)), + randBytes(1+rng.IntN(10)), 0, InternalKeyKindSet) } @@ -3217,7 +3217,7 @@ func TestIngestValidation(t *testing.T) { ) seed := uint64(time.Now().UnixNano()) - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) t.Logf("rng seed = %d", seed) // errfsCounter is used by test cases that make use of an errorfs.Injector @@ -3328,7 +3328,7 @@ func TestIngestValidation(t *testing.T) { case corruptionLocationEnd: blockIdx = len(l.Data) - 1 case corruptionLocationInternal: - blockIdx = 1 + rng.Intn(len(l.Data)-2) + blockIdx = 1 + rng.IntN(len(l.Data)-2) default: t.Fatalf("unknown corruptionLocation: %T", tc.cLoc) } @@ -3395,12 +3395,14 @@ func TestIngestValidation(t *testing.T) { var keyVals []keyVal for i := 0; i < nKeys; i++ { key := make([]byte, keySize) - _, err = rng.Read(key) - require.NoError(t, err) + for j := range key { + key[j] = byte(rng.Uint32()) + } val := make([]byte, valSize) - _, err = rng.Read(val) - require.NoError(t, err) + for j := range val { + val[j] = byte(rng.Uint32()) + } keyVals = append(keyVals, keyVal{key, val}) } diff --git a/pebble/internal/arenaskl/skl_test.go b/pebble/internal/arenaskl/skl_test.go index 6e74a4af4..7b3afbd5e 100644 --- a/pebble/internal/arenaskl/skl_test.go +++ b/pebble/internal/arenaskl/skl_test.go @@ -21,6 +21,7 @@ import ( "bytes" "encoding/binary" "fmt" + "math/rand/v2" "strconv" "sync" "sync/atomic" @@ -29,7 +30,6 @@ import ( "github.com/cockroachdb/pebble/internal/base" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) const arenaSize = 1 << 20 @@ -819,7 +819,7 @@ func BenchmarkReadWrite(b *testing.B) { var count int b.RunParallel(func(pb *testing.PB) { it := l.NewIter(nil, nil) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) buf := make([]byte, 8) for pb.Next() { @@ -857,7 +857,7 @@ func BenchmarkOrderedWrite(b *testing.B) { func BenchmarkIterNext(b *testing.B) { l := NewSkiplist(newArena(64<<10), bytes.Compare) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) buf := make([]byte, 8) for { if err := l.Add(randomKey(rng, buf), nil); err == ErrArenaFull { @@ -878,7 +878,7 @@ func BenchmarkIterNext(b *testing.B) { func BenchmarkIterPrev(b *testing.B) { l := NewSkiplist(newArena(64<<10), bytes.Compare) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) buf := make([]byte, 8) for { if err := l.Add(randomKey(rng, buf), nil); err == ErrArenaFull { @@ -951,7 +951,7 @@ func BenchmarkSeekPrefixGE(b *testing.B) { // b.ResetTimer() // var count int // b.RunParallel(func(pb *testing.PB) { -// rng := rand.New(rand.NewSource(time.Now().UnixNano())) +// rng := rand.New(rand.NewPCG(0,time.Now().UnixNano())) // for pb.Next() { // if rng.Float32() < readFrac { // mutex.RLock() diff --git a/pebble/internal/base/comparer_test.go b/pebble/internal/base/comparer_test.go index ae49a314e..eecd23752 100644 --- a/pebble/internal/base/comparer_test.go +++ b/pebble/internal/base/comparer_test.go @@ -6,11 +6,10 @@ package base import ( "fmt" + "math/rand/v2" "slices" "testing" "time" - - "golang.org/x/exp/rand" ) func TestDefAppendSeparator(t *testing.T) { @@ -56,7 +55,7 @@ func TestDefAppendSeparator(t *testing.T) { } func TestAbbreviatedKey(t *testing.T) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) randBytes := func(size int) []byte { data := make([]byte, size) for i := range data { @@ -67,7 +66,7 @@ func TestAbbreviatedKey(t *testing.T) { keys := make([][]byte, 10000) for i := range keys { - keys[i] = randBytes(rng.Intn(16)) + keys[i] = randBytes(rng.IntN(16)) } slices.SortFunc(keys, DefaultComparer.Compare) @@ -90,7 +89,7 @@ func TestAbbreviatedKey(t *testing.T) { } func BenchmarkAbbreviatedKey(b *testing.B) { - rng := rand.New(rand.NewSource(1449168817)) + rng := rand.New(rand.NewPCG(0, 1449168817)) randBytes := func(size int) []byte { data := make([]byte, size) for i := range data { diff --git a/pebble/internal/base/internal.go b/pebble/internal/base/internal.go index db691eec2..9094c5fd4 100644 --- a/pebble/internal/base/internal.go +++ b/pebble/internal/base/internal.go @@ -10,8 +10,8 @@ import ( "strconv" "strings" - "github.com/cockroachdb/redact" "github.com/cockroachdb/pebble/shims/cmp" + "github.com/cockroachdb/redact" ) const ( diff --git a/pebble/internal/batchskl/skl.go b/pebble/internal/batchskl/skl.go index f56d95c28..d98d818c6 100644 --- a/pebble/internal/batchskl/skl.go +++ b/pebble/internal/batchskl/skl.go @@ -58,13 +58,12 @@ import ( "encoding/binary" "fmt" "math" - "time" + "math/rand/v2" "unsafe" "github.com/cockroachdb/errors" "github.com/cockroachdb/pebble/internal/base" "github.com/cockroachdb/pebble/internal/constants" - "golang.org/x/exp/rand" ) const ( @@ -125,7 +124,7 @@ type Skiplist struct { head uint32 tail uint32 height uint32 // Current height: 1 <= height <= maxHeight - rand rand.PCGSource + rand rand.PCG } var ( @@ -173,7 +172,7 @@ func (s *Skiplist) Init(storage *[]byte, cmp base.Compare, abbreviatedKey base.A nodes: s.nodes[:0], height: 1, } - s.rand.Seed(uint64(time.Now().UnixNano())) + s.rand.Seed(0, rand.Uint64()) const initBufSize = 256 if cap(s.nodes) < initBufSize { diff --git a/pebble/internal/batchskl/skl_test.go b/pebble/internal/batchskl/skl_test.go index 4f67a8bc6..84f2d213d 100644 --- a/pebble/internal/batchskl/skl_test.go +++ b/pebble/internal/batchskl/skl_test.go @@ -21,13 +21,13 @@ import ( "bytes" "encoding/binary" "fmt" + "math/rand/v2" "testing" "time" "github.com/cockroachdb/errors" "github.com/cockroachdb/pebble/internal/base" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) // iterAdapter adapts the new Iterator API which returns the key and value from @@ -456,7 +456,7 @@ func BenchmarkReadWrite(b *testing.B) { } l := newTestSkiplist(d) it := l.NewIter(nil, nil) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -495,7 +495,7 @@ func BenchmarkIterNext(b *testing.B) { } l := newTestSkiplist(d) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for len(d.data)+20 < cap(d.data) { key := randomKey(rng, buf[:]) offset := d.addBytes(key) @@ -520,7 +520,7 @@ func BenchmarkIterPrev(b *testing.B) { } l := newTestSkiplist(d) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for len(d.data)+20 < cap(d.data) { key := randomKey(rng, buf[:]) offset := d.addBytes(key) diff --git a/pebble/internal/cache/clockpro_test.go b/pebble/internal/cache/clockpro_test.go index 5ec7b7f06..c402f5356 100644 --- a/pebble/internal/cache/clockpro_test.go +++ b/pebble/internal/cache/clockpro_test.go @@ -7,6 +7,7 @@ import ( "bufio" "bytes" "fmt" + "math/rand/v2" "os" "runtime" "strconv" @@ -16,7 +17,6 @@ import ( "github.com/cockroachdb/pebble/internal/base" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestCache(t *testing.T) { @@ -238,10 +238,10 @@ func BenchmarkCacheGet(b *testing.B) { b.ResetTimer() b.RunParallel(func(pb *testing.PB) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for pb.Next() { - h := cache.Get(1, base.FileNum(0).DiskFileNum(), uint64(rng.Intn(size))) + h := cache.Get(1, base.FileNum(0).DiskFileNum(), uint64(rng.IntN(size))) if h.Get() == nil { b.Fatal("failed to lookup value") } diff --git a/pebble/internal/cache/robin_hood_test.go b/pebble/internal/cache/robin_hood_test.go index d72c1b334..99b51e670 100644 --- a/pebble/internal/cache/robin_hood_test.go +++ b/pebble/internal/cache/robin_hood_test.go @@ -7,23 +7,23 @@ package cache import ( "fmt" "io" + "math/rand/v2" "runtime" "testing" "time" "github.com/cockroachdb/pebble/internal/base" - "golang.org/x/exp/rand" ) func TestRobinHoodMap(t *testing.T) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) rhMap := newRobinHoodMap(0) defer rhMap.free() goMap := make(map[key]*entry) randomKey := func() key { - n := rng.Intn(len(goMap)) + n := rng.IntN(len(goMap)) for k := range goMap { if n == 0 { return k @@ -33,7 +33,7 @@ func TestRobinHoodMap(t *testing.T) { return key{} } - ops := 10000 + rng.Intn(10000) + ops := 10000 + rng.IntN(10000) for i := 0; i < ops; i++ { var which float64 if len(goMap) > 0 { @@ -90,11 +90,11 @@ func TestRobinHoodMap(t *testing.T) { const benchSize = 1 << 20 func BenchmarkGoMapInsert(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) for i := range keys { - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) } b.ResetTimer() @@ -111,11 +111,11 @@ func BenchmarkGoMapInsert(b *testing.B) { } func BenchmarkRobinHoodInsert(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) for i := range keys { - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) } e := &entry{} b.ResetTimer() @@ -135,13 +135,13 @@ func BenchmarkRobinHoodInsert(b *testing.B) { } func BenchmarkGoMapLookupHit(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) m := make(map[key]*entry, len(keys)) e := &entry{} for i := range keys { - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) m[keys[i]] = e } b.ResetTimer() @@ -160,13 +160,13 @@ func BenchmarkGoMapLookupHit(b *testing.B) { } func BenchmarkRobinHoodLookupHit(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) m := newRobinHoodMap(len(keys)) e := &entry{} for i := range keys { - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) m.Put(keys[i], e) } b.ResetTimer() @@ -186,14 +186,14 @@ func BenchmarkRobinHoodLookupHit(b *testing.B) { } func BenchmarkGoMapLookupMiss(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) m := make(map[key]*entry, len(keys)) e := &entry{} for i := range keys { keys[i].id = 1 - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) m[keys[i]] = e keys[i].id = 2 } @@ -213,14 +213,14 @@ func BenchmarkGoMapLookupMiss(b *testing.B) { } func BenchmarkRobinHoodLookupMiss(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) keys := make([]key, benchSize) m := newRobinHoodMap(len(keys)) e := &entry{} for i := range keys { keys[i].id = 1 - keys[i].fileNum = base.FileNum(rng.Uint64n(1 << 20)).DiskFileNum() - keys[i].offset = uint64(rng.Intn(1 << 20)) + keys[i].fileNum = base.FileNum(rng.Uint64N(1 << 20)).DiskFileNum() + keys[i].offset = uint64(rng.IntN(1 << 20)) m.Put(keys[i], e) keys[i].id = 2 } diff --git a/pebble/internal/fastrand/fastrand_test.go b/pebble/internal/fastrand/fastrand_test.go index 581c056c0..5144a54e5 100644 --- a/pebble/internal/fastrand/fastrand_test.go +++ b/pebble/internal/fastrand/fastrand_test.go @@ -6,21 +6,20 @@ package fastrand import ( "fmt" + "math/rand/v2" "sync" "testing" "time" - - "golang.org/x/exp/rand" ) type defaultRand struct { mu sync.Mutex - src rand.PCGSource + src rand.PCG } func newDefaultRand() *defaultRand { r := &defaultRand{} - r.src.Seed(uint64(time.Now().UnixNano())) + r.src.Seed(0, uint64(time.Now().UnixNano())) return r } @@ -70,15 +69,15 @@ func BenchmarkSTDefaultRand(b *testing.B) { name = fmt.Sprintf("new-period=%d", newPeriod) } b.Run(name, func(b *testing.B) { - r := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + r := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() var x uint32 for i := 0; i < b.N; i++ { if newPeriod > 0 && i%newPeriod == 0 { - r = rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + r = rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) } // Arbitrary constant. - x = uint32(r.Uint64n(2097152)) + x = uint32(r.Uint64N(2097152)) } xg = x }) diff --git a/pebble/internal/lint/lint_test.go b/pebble/internal/lint/lint_test.go index e088d6964..045a5697d 100644 --- a/pebble/internal/lint/lint_test.go +++ b/pebble/internal/lint/lint_test.go @@ -22,9 +22,9 @@ import ( const ( cmdGo = "go" - golint = "golang.org/x/lint/golint@6edffad5e6160f5949cdefc81710b2706fbcd4f6" - staticcheck = "honnef.co/go/tools/cmd/staticcheck@2023.1" - crlfmt = "github.com/cockroachdb/crlfmt@44a36ec7" + golint = "golang.org/x/lint/golint" + staticcheck = "honnef.co/go/tools/cmd/staticcheck" + crlfmt = "github.com/cockroachdb/crlfmt" ) func dirCmd(t *testing.T, dir string, name string, args ...string) stream.Filter { @@ -45,6 +45,23 @@ func ignoreGoMod() stream.Filter { return stream.GrepNot(`^go: (finding|extracting|downloading)`) } +func getTool(t *testing.T, path string) { + cmd := exec.Command("go", "get", path) + out, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("cannot get %q: %v\n%s\n", path, err, out) + } +} + +func installTool(t *testing.T, path string) { + getTool(t, path) + cmd := exec.Command("go", "install", path) + out, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("cannot install %q: %v\n%s\n", path, err, out) + } +} + func TestLint(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("lint checks skipped on Windows") @@ -54,7 +71,7 @@ func TestLint(t *testing.T) { t.Skip("lint checks skipped on race builds") } - const root = "github.com/cockroachdb/pebble" + const root = "./" pkg, err := build.Import(root, "../..", 0) require.NoError(t, err) @@ -71,6 +88,7 @@ func TestLint(t *testing.T) { } t.Run("TestGolint", func(t *testing.T) { + installTool(t, golint) t.Parallel() args := []string{"run", golint} @@ -90,6 +108,7 @@ func TestLint(t *testing.T) { }) t.Run("TestStaticcheck", func(t *testing.T) { + installTool(t, staticcheck) t.Parallel() args := []string{"run", staticcheck} @@ -240,6 +259,7 @@ func TestLint(t *testing.T) { }) t.Run("TestCrlfmt", func(t *testing.T) { + installTool(t, crlfmt) t.Parallel() args := []string{"run", crlfmt, "-fast", "-tab", "2", "."} diff --git a/pebble/internal/manifest/l0_sublevels_test.go b/pebble/internal/manifest/l0_sublevels_test.go index 8cedb8735..bfc024c0c 100644 --- a/pebble/internal/manifest/l0_sublevels_test.go +++ b/pebble/internal/manifest/l0_sublevels_test.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "math" + "math/rand/v2" "os" "slices" "sort" @@ -22,7 +23,6 @@ import ( "github.com/cockroachdb/pebble/internal/testkeys" "github.com/cockroachdb/pebble/record" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func readManifest(filename string) (*Version, error) { @@ -497,7 +497,7 @@ func TestL0Sublevels(t *testing.T) { func TestAddL0FilesEquivalence(t *testing.T) { seed := uint64(time.Now().UnixNano()) - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) t.Logf("seed: %d", seed) var inUseKeys [][]byte @@ -506,19 +506,19 @@ func TestAddL0FilesEquivalence(t *testing.T) { var s, s2 *L0Sublevels keySpace := testkeys.Alpha(8) - flushSplitMaxBytes := rng.Int63n(1 << 20) + flushSplitMaxBytes := rng.Int64N(1 << 20) // The outer loop runs once for each version edit. The inner loop(s) run // once for each file, or each file bound. for i := 0; i < 100; i++ { var filesToAdd []*FileMetadata - numFiles := 1 + rng.Intn(9) + numFiles := 1 + rng.IntN(9) keys := make([][]byte, 0, 2*numFiles) for j := 0; j < 2*numFiles; j++ { if rng.Float64() <= keyReusePct && len(inUseKeys) > 0 { - keys = append(keys, inUseKeys[rng.Intn(len(inUseKeys))]) + keys = append(keys, inUseKeys[rng.IntN(len(inUseKeys))]) } else { - newKey := testkeys.Key(keySpace, rng.Int63n(keySpace.Count())) + newKey := testkeys.Key(keySpace, rng.Int64N(keySpace.Count())) inUseKeys = append(inUseKeys, newKey) keys = append(keys, newKey) } @@ -532,7 +532,7 @@ func TestAddL0FilesEquivalence(t *testing.T) { } meta := (&FileMetadata{ FileNum: base.FileNum(i*10 + j + 1), - Size: rng.Uint64n(1 << 20), + Size: rng.Uint64N(1 << 20), SmallestSeqNum: uint64(2*i + 1), LargestSeqNum: uint64(2*i + 2), }).ExtendPointKeyBounds( diff --git a/pebble/internal/metamorphic/crossversion/crossversion_test.go b/pebble/internal/metamorphic/crossversion/crossversion_test.go index 192140e28..0e74aa336 100644 --- a/pebble/internal/metamorphic/crossversion/crossversion_test.go +++ b/pebble/internal/metamorphic/crossversion/crossversion_test.go @@ -365,7 +365,7 @@ func (f *pebbleVersions) String() string { if i > 0 { fmt.Fprint(&buf, " ") } - fmt.Fprintf(&buf, v.SHA) + fmt.Fprintf(&buf, "%s", v.SHA) } return buf.String() } diff --git a/pebble/internal/pacertoy/pebble/main.go b/pebble/internal/pacertoy/pebble/main.go index 910d5c089..005e155bc 100644 --- a/pebble/internal/pacertoy/pebble/main.go +++ b/pebble/internal/pacertoy/pebble/main.go @@ -7,13 +7,13 @@ package main import ( "fmt" "math" + "math/rand/v2" "os" "sync" "sync/atomic" "time" "github.com/cockroachdb/pebble/internal/rate" - "golang.org/x/exp/rand" ) const ( @@ -163,7 +163,7 @@ func newDB() *DB { // drainCompaction simulates background compactions. func (db *DB) drainCompaction() { - rng := rand.New(rand.NewSource(1)) + rng := rand.New(rand.NewPCG(0, 1)) for { db.compactionMu.Lock() @@ -176,7 +176,7 @@ func (db *DB) drainCompaction() { var delay bool for i, size := int64(0), int64(0); i < *l0Table; i += size { - size = 10000 + rng.Int63n(500) + size = 10000 + rng.Int64N(500) if size > (*l0Table - i) { size = *l0Table - i } @@ -206,7 +206,7 @@ func (db *DB) drainCompaction() { for t := 0; t < tablesToCompact; t++ { db.compactionPacer.fill(memtableSize) for i, size := int64(0), int64(0); i < memtableSize; i += size { - size = 10000 + rng.Int63n(500) + size = 10000 + rng.Int64N(500) if size > (totalCompactionBytes - i) { size = totalCompactionBytes - i } @@ -237,7 +237,7 @@ func (db *DB) fillCompaction(size int64) { // drainMemtable simulates memtable flushing. func (db *DB) drainMemtable() { - rng := rand.New(rand.NewSource(2)) + rng := rand.New(rand.NewPCG(0, 2)) for { db.mu.Lock() @@ -249,7 +249,7 @@ func (db *DB) drainMemtable() { var delay bool for i, size := int64(0), int64(0); i < *memtable; i += size { - size = 1000 + rng.Int63n(50) + size = 1000 + rng.Int64N(50) if size > (*memtable - i) { size = *memtable - i } @@ -325,17 +325,17 @@ func simulateWrite(db *DB, measureLatencyMode bool) { if !measureLatencyMode { go func() { - rng := rand.New(rand.NewSource(3)) + rng := rand.New(rand.NewPCG(0, 3)) for { - secs := 5 + rng.Intn(5) + secs := 5 + rng.IntN(5) time.Sleep(time.Duration(secs) * time.Second) - mb := 10 + rng.Intn(20) + mb := 10 + rng.IntN(20) setRate(mb) } }() } - rng := rand.New(rand.NewSource(uint64(4))) + rng := rand.New(rand.NewPCG(0, uint64(4))) totalWrites := int64(0) percentiles := []int64{50, 95, 99} @@ -344,7 +344,7 @@ func simulateWrite(db *DB, measureLatencyMode bool) { startTime := time.Now() for totalWrites <= writeAmount { - size := 1000 + rng.Int63n(50) + size := 1000 + rng.Int64N(50) if !measureLatencyMode { limiter.Wait(float64(size)) } diff --git a/pebble/internal/pacertoy/rocksdb/main.go b/pebble/internal/pacertoy/rocksdb/main.go index a33fb9867..fc7d6431b 100644 --- a/pebble/internal/pacertoy/rocksdb/main.go +++ b/pebble/internal/pacertoy/rocksdb/main.go @@ -7,12 +7,12 @@ package main import ( "fmt" "math" + "math/rand/v2" "sync" "sync/atomic" "time" "github.com/cockroachdb/pebble/internal/rate" - "golang.org/x/exp/rand" ) const ( @@ -144,7 +144,7 @@ func newDB() *DB { // drainCompaction simulates background compactions. func (db *DB) drainCompaction() { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for { db.compactionMu.Lock() @@ -156,7 +156,7 @@ func (db *DB) drainCompaction() { db.compactionMu.Unlock() for i, size := int64(0), int64(0); i < *l0Table; i += size { - size = 10000 + rng.Int63n(500) + size = 10000 + rng.Int64N(500) if size > (*l0Table - i) { size = *l0Table - i } @@ -186,7 +186,7 @@ func (db *DB) drainCompaction() { for t := 0; t < tablesToCompact; t++ { for i, size := int64(0), int64(0); i < memtableSize; i += size { - size = 10000 + rng.Int63n(500) + size = 10000 + rng.Int64N(500) if size > (totalCompactionBytes - i) { size = totalCompactionBytes - i } @@ -217,7 +217,7 @@ func (db *DB) fillCompaction(size int64) { // drainMemtable simulates memtable flushing. func (db *DB) drainMemtable() { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for { db.mu.Lock() @@ -228,7 +228,7 @@ func (db *DB) drainMemtable() { db.mu.Unlock() for i, size := int64(0), int64(0); i < *memtable; i += size { - size = 1000 + rng.Int63n(50) + size = 1000 + rng.Int64N(50) if size > (*memtable - i) { size = *memtable - i } @@ -315,19 +315,19 @@ func simulateWrite(db *DB) { } go func() { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for { - secs := 5 + rng.Intn(5) + secs := 5 + rng.IntN(5) time.Sleep(time.Duration(secs) * time.Second) - mb := 11 + rng.Intn(20) + mb := 11 + rng.IntN(20) setRate(mb) } }() - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for { - size := 1000 + rng.Int63n(50) + size := 1000 + rng.Int64N(50) limiter.Wait(float64(size)) db.writeLimiter.Wait(float64(size)) db.fillMemtable(size) diff --git a/pebble/internal/randvar/deck.go b/pebble/internal/randvar/deck.go index 873348f01..3e9f024a4 100644 --- a/pebble/internal/randvar/deck.go +++ b/pebble/internal/randvar/deck.go @@ -5,9 +5,8 @@ package randvar import ( + "math/rand/v2" "sync" - - "golang.org/x/exp/rand" ) // Deck is a random number generator that generates numbers in the range diff --git a/pebble/internal/randvar/flag.go b/pebble/internal/randvar/flag.go index d962b77aa..1a98ec065 100644 --- a/pebble/internal/randvar/flag.go +++ b/pebble/internal/randvar/flag.go @@ -6,12 +6,13 @@ package randvar import ( "encoding/binary" + // "math/rand/v2" + rand "math/rand/v2" "regexp" "strconv" "strings" "github.com/cockroachdb/errors" - "golang.org/x/exp/rand" ) var randVarRE = regexp.MustCompile(`^(?:(latest|uniform|zipf):)?(\d+)(?:-(\d+))?$`) diff --git a/pebble/internal/randvar/rand.go b/pebble/internal/randvar/rand.go index f7d18a2ad..49b8eaac4 100644 --- a/pebble/internal/randvar/rand.go +++ b/pebble/internal/randvar/rand.go @@ -5,14 +5,13 @@ package randvar import ( + "math/rand/v2" "time" - - "golang.org/x/exp/rand" ) // NewRand creates a new random number generator seeded with the current time. func NewRand() *rand.Rand { - return rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + return rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) } func ensureRand(rng *rand.Rand) *rand.Rand { diff --git a/pebble/internal/randvar/randvar.go b/pebble/internal/randvar/randvar.go index d7d1d90f9..a5a24a7e4 100644 --- a/pebble/internal/randvar/randvar.go +++ b/pebble/internal/randvar/randvar.go @@ -4,7 +4,7 @@ package randvar -import "golang.org/x/exp/rand" +import rand "math/rand/v2" // Static models a random variable that pulls from a distribution with static // bounds diff --git a/pebble/internal/randvar/skewed_latest.go b/pebble/internal/randvar/skewed_latest.go index 1a3dbb1bd..12a967600 100644 --- a/pebble/internal/randvar/skewed_latest.go +++ b/pebble/internal/randvar/skewed_latest.go @@ -16,9 +16,9 @@ package randvar import ( + // "math/rand/v2" + rand "math/rand/v2" "sync" - - "golang.org/x/exp/rand" ) // SkewedLatest is a random number generator that generates numbers in diff --git a/pebble/internal/randvar/uniform.go b/pebble/internal/randvar/uniform.go index 8f85e97c4..4fa95a2ec 100644 --- a/pebble/internal/randvar/uniform.go +++ b/pebble/internal/randvar/uniform.go @@ -16,9 +16,8 @@ package randvar import ( + "math/rand/v2" "sync/atomic" - - "golang.org/x/exp/rand" ) // Uniform is a random number generator that generates draws from a uniform @@ -50,5 +49,5 @@ func (g *Uniform) Max() uint64 { // Uint64 returns a random Uint64 between min and max, drawn from a uniform // distribution. func (g *Uniform) Uint64(rng *rand.Rand) uint64 { - return rng.Uint64n(g.Max()-g.min+1) + g.min + return rng.Uint64N(g.Max()-g.min+1) + g.min } diff --git a/pebble/internal/randvar/weighted.go b/pebble/internal/randvar/weighted.go index 3294757b2..6339c48e8 100644 --- a/pebble/internal/randvar/weighted.go +++ b/pebble/internal/randvar/weighted.go @@ -4,7 +4,7 @@ package randvar -import "golang.org/x/exp/rand" +import "math/rand/v2" // Weighted is a random number generator that generates numbers in the range // [0,len(weights)-1] where the probability of i is weights(i)/sum(weights). diff --git a/pebble/internal/randvar/zipf.go b/pebble/internal/randvar/zipf.go index f9aa4e03b..3727c8155 100644 --- a/pebble/internal/randvar/zipf.go +++ b/pebble/internal/randvar/zipf.go @@ -21,10 +21,11 @@ package randvar import ( "math" + // "math/rand/v2" + rand "math/rand/v2" "sync" "github.com/cockroachdb/errors" - "golang.org/x/exp/rand" ) const ( diff --git a/pebble/internal/testkeys/testkeys.go b/pebble/internal/testkeys/testkeys.go index 091baa178..8f8c273bf 100644 --- a/pebble/internal/testkeys/testkeys.go +++ b/pebble/internal/testkeys/testkeys.go @@ -16,12 +16,12 @@ import ( "bytes" "fmt" "math" + "math/rand/v2" "strconv" "strings" "github.com/cockroachdb/pebble/internal/base" "github.com/cockroachdb/pebble/shims/cmp" - "golang.org/x/exp/rand" ) const alpha = "abcdefghijklmnopqrstuvwxyz" @@ -458,9 +458,9 @@ func RandomSeparator(dst, a, b []byte, suffix int64, maxLength int, rng *rand.Ra } // If we can generate a key which is actually in the middle of apIdx // and bpIdx use it so that we don't have to bother about timestamps. - generatedIdx = rng.Int63n(add) + start + generatedIdx = rng.Int64N(add) + start for diff > 1 && generatedIdx == apIdx || generatedIdx == bpIdx { - generatedIdx = rng.Int63n(add) + start + generatedIdx = rng.Int64N(add) + start } } @@ -478,11 +478,11 @@ func RandomSeparator(dst, a, b []byte, suffix int64, maxLength int, rng *rand.Ra // any suffix we generate will be greater than it. if as == 0 { // bs > as - suffix = bs + rng.Int63n(10) + 1 + suffix = bs + rng.Int64N(10) + 1 } else { // bs < as. // Generate suffix in range [bs + 1, as - 1] - suffix = bs + 1 + rng.Int63n(as-bs-1) + suffix = bs + 1 + rng.Int64N(as-bs-1) } case generatedIdx == apIdx: // NB: The zero suffix (suffix-less) sorts before all other suffixes, so @@ -490,11 +490,11 @@ func RandomSeparator(dst, a, b []byte, suffix int64, maxLength int, rng *rand.Ra if as == 0 && suffix == 0 { suffix++ } else if as != 0 && suffix >= as { - suffix = rng.Int63n(as) + suffix = rng.Int64N(as) } case generatedIdx == bpIdx: if suffix <= bs { - suffix = bs + rng.Int63n(10) + 1 + suffix = bs + rng.Int64N(10) + 1 } } if sz := maxLength + SuffixLen(suffix); cap(dst) < sz { diff --git a/pebble/internal/testkeys/testkeys_test.go b/pebble/internal/testkeys/testkeys_test.go index 43514bd6e..cb2b7481b 100644 --- a/pebble/internal/testkeys/testkeys_test.go +++ b/pebble/internal/testkeys/testkeys_test.go @@ -7,12 +7,12 @@ package testkeys import ( "bytes" "fmt" + "math/rand/v2" "slices" "testing" "github.com/cockroachdb/datadriven" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestGenerateAlphabetKey(t *testing.T) { @@ -220,13 +220,13 @@ func keyspaceToString(ks Keyspace) string { } func TestRandomSeparator(t *testing.T) { - rng := rand.New(rand.NewSource(0)) + rng := rand.New(rand.NewPCG(0, 0)) keys := [][]byte{[]byte("a"), []byte("zzz@9")} for n := 0; n < 1000; n++ { - i := rng.Intn(len(keys)) - j := rng.Intn(len(keys)) + i := rng.IntN(len(keys)) + j := rng.IntN(len(keys)) for i == j { - j = rng.Intn(len(keys)) + j = rng.IntN(len(keys)) } if i > j { i, j = j, i @@ -234,7 +234,7 @@ func TestRandomSeparator(t *testing.T) { a := keys[i] b := keys[j] - suffix := rng.Int63n(10) + suffix := rng.Int64N(10) sep := RandomSeparator(nil, a, b, suffix, 3, rng) t.Logf("RandomSeparator(%q, %q, %d) = %q\n", a, b, suffix, sep) if sep == nil { diff --git a/pebble/iterator_test.go b/pebble/iterator_test.go index 0be563dc7..821ea0a76 100644 --- a/pebble/iterator_test.go +++ b/pebble/iterator_test.go @@ -10,6 +10,7 @@ import ( "flag" "fmt" "io" + "math/rand/v2" "runtime" "sort" "strconv" @@ -29,7 +30,6 @@ import ( "github.com/cockroachdb/pebble/sstable" "github.com/cockroachdb/pebble/vfs" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) var testKeyValuePairs = []string{ @@ -295,7 +295,7 @@ func testIterator( } // Test randomly generated sub-iterators. - r := rand.New(rand.NewSource(0)) + r := rand.New(rand.NewPCG(0, 0)) for i, nBad := 0, 0; i < 1000; i++ { bad := false @@ -1245,7 +1245,7 @@ func randStr(fill []byte, rng *rand.Rand) { const letters = "abcdefghijklmnopqrstuvwxyz" const lettersLen = len(letters) for i := 0; i < len(fill); i++ { - fill[i] = letters[rng.Intn(lettersLen)] + fill[i] = letters[rng.IntN(lettersLen)] } } @@ -1257,7 +1257,7 @@ func randValue(n int, rng *rand.Rand) []byte { func randKey(n int, rng *rand.Rand) ([]byte, int) { keyPrefix := randValue(n, rng) - suffix := rng.Intn(100) + suffix := rng.IntN(100) return append(keyPrefix, []byte(fmt.Sprintf("%02d", suffix))...), suffix } @@ -1279,15 +1279,15 @@ func TestIteratorRandomizedBlockIntervalFilter(t *testing.T) { seed = uint64(time.Now().UnixNano()) t.Logf("seed: %d", seed) } - rng := rand.New(rand.NewSource(seed)) - opts.FlushSplitBytes = 1 << rng.Intn(8) // 1B - 256B - opts.L0CompactionThreshold = 1 << rng.Intn(2) // 1-2 - opts.L0CompactionFileThreshold = 1 << rng.Intn(11) // 1-1024 - opts.LBaseMaxBytes = 1 << rng.Intn(11) // 1B - 1KB + rng := rand.New(rand.NewPCG(0, seed)) + opts.FlushSplitBytes = 1 << rng.IntN(8) // 1B - 256B + opts.L0CompactionThreshold = 1 << rng.IntN(2) // 1-2 + opts.L0CompactionFileThreshold = 1 << rng.IntN(11) // 1-1024 + opts.LBaseMaxBytes = 1 << rng.IntN(11) // 1B - 1KB opts.MemTableSize = 2 << 10 // 2KB var lopts LevelOptions - lopts.BlockSize = 1 << rng.Intn(8) // 1B - 256B - lopts.IndexBlockSize = 1 << rng.Intn(8) // 1B - 256B + lopts.BlockSize = 1 << rng.IntN(8) // 1B - 256B + lopts.IndexBlockSize = 1 << rng.IntN(8) // 1B - 256B opts.Levels = []LevelOptions{lopts} d, err := Open("", opts) @@ -1296,14 +1296,14 @@ func TestIteratorRandomizedBlockIntervalFilter(t *testing.T) { require.NoError(t, d.Close()) }() matchingKeyValues := make(map[string]string) - lower := rng.Intn(100) - upper := rng.Intn(100) + lower := rng.IntN(100) + upper := rng.IntN(100) if lower > upper { lower, upper = upper, lower } n := 2000 for i := 0; i < n; i++ { - key, suffix := randKey(20+rng.Intn(5), rng) + key, suffix := randKey(20+rng.IntN(5), rng) value := randValue(50, rng) if lower <= suffix && suffix < upper { matchingKeyValues[string(key)] = string(value) @@ -1378,7 +1378,7 @@ func TestIteratorGuaranteedDurable(t *testing.T) { } func TestIteratorBoundsLifetimes(t *testing.T) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) d := newPointTestkeysDatabase(t, testkeys.Alpha(2)) defer func() { require.NoError(t, d.Close()) }() @@ -1419,7 +1419,9 @@ func TestIteratorBoundsLifetimes(t *testing.T) { } trashBounds := func(bounds ...[]byte) { for _, bound := range bounds { - rng.Read(bound[:]) + for j := range bound { + bound[j] = byte(rng.Uint32()) + } } } @@ -1601,7 +1603,7 @@ func TestSetOptionsEquivalence(t *testing.T) { } func testSetOptionsEquivalence(t *testing.T, seed uint64) { - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) ks := testkeys.Alpha(2) d := newTestkeysDatabase(t, ks, rng) defer func() { require.NoError(t, d.Close()) }() @@ -1609,20 +1611,20 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { var o IterOptions generateNewOptions := func() { // TODO(jackson): Include test coverage for block property filters, etc. - if rng.Intn(2) == 1 { - o.KeyTypes = IterKeyType(rng.Intn(3)) + if rng.IntN(2) == 1 { + o.KeyTypes = IterKeyType(rng.IntN(3)) } - if rng.Intn(2) == 1 { - if rng.Intn(2) == 1 { + if rng.IntN(2) == 1 { + if rng.IntN(2) == 1 { o.LowerBound = nil - if rng.Intn(2) == 1 { - o.LowerBound = testkeys.KeyAt(ks, rng.Int63n(ks.Count()), rng.Int63n(ks.Count())) + if rng.IntN(2) == 1 { + o.LowerBound = testkeys.KeyAt(ks, rng.Int64N(ks.Count()), rng.Int64N(ks.Count())) } } - if rng.Intn(2) == 1 { + if rng.IntN(2) == 1 { o.UpperBound = nil - if rng.Intn(2) == 1 { - o.UpperBound = testkeys.KeyAt(ks, rng.Int63n(ks.Count()), rng.Int63n(ks.Count())) + if rng.IntN(2) == 1 { + o.UpperBound = testkeys.KeyAt(ks, rng.Int64N(ks.Count()), rng.Int64N(ks.Count())) } } if testkeys.Comparer.Compare(o.LowerBound, o.UpperBound) > 0 { @@ -1630,8 +1632,8 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { } } o.RangeKeyMasking.Suffix = nil - if o.KeyTypes == IterKeyTypePointsAndRanges && rng.Intn(2) == 1 { - o.RangeKeyMasking.Suffix = testkeys.Suffix(rng.Int63n(ks.Count())) + if o.KeyTypes == IterKeyTypePointsAndRanges && rng.IntN(2) == 1 { + o.RangeKeyMasking.Suffix = testkeys.Suffix(rng.Int64N(ks.Count())) } } @@ -1659,7 +1661,7 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { positioningOps := []func() positioningOp{ // SeekGE func() positioningOp { - k := testkeys.Key(ks, rng.Int63n(ks.Count())) + k := testkeys.Key(ks, rng.Int64N(ks.Count())) return positioningOp{ desc: fmt.Sprintf("SeekGE(%q)", k), run: func(it *Iterator) IterValidityState { @@ -1669,7 +1671,7 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { }, // SeekLT func() positioningOp { - k := testkeys.Key(ks, rng.Int63n(ks.Count())) + k := testkeys.Key(ks, rng.Int64N(ks.Count())) return positioningOp{ desc: fmt.Sprintf("SeekLT(%q)", k), run: func(it *Iterator) IterValidityState { @@ -1679,7 +1681,7 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { }, // SeekPrefixGE func() positioningOp { - k := testkeys.Key(ks, rng.Int63n(ks.Count())) + k := testkeys.Key(ks, rng.Int64N(ks.Count())) return positioningOp{ desc: fmt.Sprintf("SeekPrefixGE(%q)", k), run: func(it *Iterator) IterValidityState { @@ -1705,7 +1707,7 @@ func testSetOptionsEquivalence(t *testing.T, seed uint64) { } // Apply the same operation to both keys. - iterOp := positioningOps[rng.Intn(len(positioningOps))]() + iterOp := positioningOps[rng.IntN(len(positioningOps))]() newIterValidity := iterOp.run(newIter) longLivedValidity := iterOp.run(longLivedIter) @@ -1767,18 +1769,18 @@ func newTestkeysDatabase(t *testing.T, ks testkeys.Keyspace, rng *rand.Rand) *DB for i := 0; i < len(order); i++ { const maxVersionsPerKey = 10 keyIndex := order[i] - for versions := rng.Intn(maxVersionsPerKey); versions > 0; versions-- { - n := testkeys.WriteKeyAt(keyBuf, ks, int64(keyIndex), rng.Int63n(maxVersionsPerKey)) + for versions := rng.IntN(maxVersionsPerKey); versions > 0; versions-- { + n := testkeys.WriteKeyAt(keyBuf, ks, int64(keyIndex), rng.Int64N(maxVersionsPerKey)) b.Set(keyBuf[:n], keyBuf[:n], nil) } // Sometimes add a range key too. - if rng.Intn(100) == 1 { - startIdx := rng.Int63n(ks.Count()) - endIdx := rng.Int63n(ks.Count()) + if rng.IntN(100) == 1 { + startIdx := rng.Int64N(ks.Count()) + endIdx := rng.Int64N(ks.Count()) startLen := testkeys.WriteKey(keyBuf, ks, startIdx) endLen := testkeys.WriteKey(keyBuf2, ks, endIdx) - suffixInt := rng.Int63n(maxVersionsPerKey) + suffixInt := rng.Int64N(maxVersionsPerKey) require.NoError(t, b.RangeKeySet( keyBuf[:startLen], keyBuf2[:endLen], @@ -1788,7 +1790,7 @@ func newTestkeysDatabase(t *testing.T, ks testkeys.Keyspace, rng *rand.Rand) *DB } // Randomize the flush points. - if !b.Empty() && rng.Intn(10) == 1 { + if !b.Empty() && rng.IntN(10) == 1 { require.NoError(t, b.Commit(nil)) require.NoError(t, d.Flush()) b = d.NewBatch() @@ -1825,11 +1827,11 @@ func BenchmarkIteratorSeekGE(b *testing.B) { comparer: *DefaultComparer, iter: m.newIter(nil), } - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() for i := 0; i < b.N; i++ { - key := keys[rng.Intn(len(keys))] + key := keys[rng.IntN(len(keys))] iter.SeekGE(key) } } @@ -2090,7 +2092,7 @@ func BenchmarkIteratorSeqSeekGEWithBounds(b *testing.B) { valid = iter.Next() } if iter.Error() != nil { - b.Fatalf(iter.Error().Error()) + b.Fatalf("%s", iter.Error().Error()) } } iter.Close() @@ -2146,7 +2148,7 @@ func BenchmarkIteratorSeekGENoop(b *testing.B) { } func BenchmarkBlockPropertyFilter(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for _, matchInterval := range []int{1, 10, 100, 1000} { b.Run(fmt.Sprintf("match-interval=%d", matchInterval), func(b *testing.B) { mem := vfs.NewMem() @@ -2209,27 +2211,27 @@ func TestRangeKeyMaskingRandomized(t *testing.T) { seed = uint64(time.Now().UnixNano()) t.Logf("seed: %d", seed) } - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) // Generate keyspace with point keys, and range keys which will // mask the point keys. var timestamps []int64 for i := 0; i <= 100; i++ { - timestamps = append(timestamps, rng.Int63n(1000)) + timestamps = append(timestamps, rng.Int64N(1000)) } ks := testkeys.Alpha(5) - numKeys := 1000 + rng.Intn(9000) + numKeys := 1000 + rng.IntN(9000) keys := make([][]byte, numKeys) keyTimeStamps := make([]int64, numKeys) // ts associated with the keys. for i := 0; i < numKeys; i++ { keys[i] = make([]byte, 5+testkeys.MaxSuffixLen) - keyTimeStamps[i] = timestamps[rng.Intn(len(timestamps))] - n := testkeys.WriteKeyAt(keys[i], ks, rng.Int63n(ks.Count()), keyTimeStamps[i]) + keyTimeStamps[i] = timestamps[rng.IntN(len(timestamps))] + n := testkeys.WriteKeyAt(keys[i], ks, rng.Int64N(ks.Count()), keyTimeStamps[i]) keys[i] = keys[i][:n] } - numRangeKeys := rng.Intn(20) + numRangeKeys := rng.IntN(20) type rkey struct { start []byte end []byte @@ -2241,18 +2243,18 @@ func TestRangeKeyMaskingRandomized(t *testing.T) { rkeys[i].start = make([]byte, 5) rkeys[i].end = make([]byte, 5) - testkeys.WriteKey(rkeys[i].start[:5], ks, rng.Int63n(ks.Count())) - testkeys.WriteKey(rkeys[i].end[:5], ks, rng.Int63n(ks.Count())) + testkeys.WriteKey(rkeys[i].start[:5], ks, rng.Int64N(ks.Count())) + testkeys.WriteKey(rkeys[i].end[:5], ks, rng.Int64N(ks.Count())) for bytes.Equal(rkeys[i].start[:5], rkeys[i].end[:5]) { - testkeys.WriteKey(rkeys[i].end[:5], ks, rng.Int63n(ks.Count())) + testkeys.WriteKey(rkeys[i].end[:5], ks, rng.Int64N(ks.Count())) } if bytes.Compare(rkeys[i].start[:5], rkeys[i].end[:5]) > 0 { rkeys[i].start, rkeys[i].end = rkeys[i].end, rkeys[i].start } - rkeyTimestamp := timestamps[rng.Intn(len(timestamps))] + rkeyTimestamp := timestamps[rng.IntN(len(timestamps))] rkeys[i].suffix = []byte("@" + strconv.FormatInt(rkeyTimestamp, 10)) // Each time we create a range key, check if the range key masks any @@ -2291,12 +2293,12 @@ func TestRangeKeyMaskingRandomized(t *testing.T) { randomOpts := testOpts{ levelOpts: []LevelOptions{ { - TargetFileSize: int64(1 + rng.Intn(2<<20)), // Vary the L0 file size. - BlockSize: 1 + rng.Intn(32<<10), + TargetFileSize: int64(1 + rng.IntN(2<<20)), // Vary the L0 file size. + BlockSize: 1 + rng.IntN(32<<10), }, }, } - if rng.Intn(2) == 0 { + if rng.IntN(2) == 0 { randomOpts.filter = func() BlockPropertyFilterMask { return sstable.NewTestKeysMaskingFilter() } @@ -2401,14 +2403,14 @@ func TestRangeKeyMaskingRandomized(t *testing.T) { t.Fatalf("iteration didn't produce identical results") } if hasP1 && !bytes.Equal(iter1.Key(), iter2.Key()) { - t.Fatalf(fmt.Sprintf("iteration didn't produce identical point keys: %s, %s", iter1.Key(), iter2.Key())) + t.Fatalf("%s", fmt.Sprintf("iteration didn't produce identical point keys: %s, %s", iter1.Key(), iter2.Key())) } if hasR1 { // Confirm that the range key is the same. b1, e1 := iter1.RangeBounds() b2, e2 := iter2.RangeBounds() if !bytes.Equal(b1, b2) || !bytes.Equal(e1, e2) { - t.Fatalf(fmt.Sprintf( + t.Fatalf("%s", fmt.Sprintf( "iteration didn't produce identical range keys: [%s, %s], [%s, %s]", b1, e1, b2, e2, )) @@ -2419,7 +2421,7 @@ func TestRangeKeyMaskingRandomized(t *testing.T) { // Confirm that the returned point key wasn't hidden. for j, pkey := range keys { if bytes.Equal(iter1.Key(), pkey) && pointKeyHidden[j] { - t.Fatalf(fmt.Sprintf("hidden point key was exposed %s %d", pkey, keyTimeStamps[j])) + t.Fatalf("%s", fmt.Sprintf("hidden point key was exposed %s %d", pkey, keyTimeStamps[j])) } } } @@ -2439,7 +2441,7 @@ func BenchmarkIterator_RangeKeyMasking(b *testing.B) { keysPerBatch = 50 ) var alloc bytealloc.A - rng := rand.New(rand.NewSource(uint64(1658872515083979000))) + rng := rand.New(rand.NewPCG(0, uint64(1658872515083979000))) keyBuf := make([]byte, prefixLen+testkeys.MaxSuffixLen) valBuf := make([]byte, valueSize) @@ -2462,7 +2464,7 @@ func BenchmarkIterator_RangeKeyMasking(b *testing.B) { batch := d.NewBatch() for k := 0; k < keysPerBatch; k++ { randStr(keyBuf[:prefixLen], rng) - suffix := rng.Int63n(100) + suffix := rng.Int64N(100) suffixLen := testkeys.WriteSuffix(keyBuf[prefixLen:], suffix) randStr(valBuf[:], rng) @@ -2574,7 +2576,7 @@ func BenchmarkIterator_RangeKeyMasking(b *testing.B) { func BenchmarkIteratorScan(b *testing.B) { const maxPrefixLen = 8 keyBuf := make([]byte, maxPrefixLen+testkeys.MaxSuffixLen) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) for _, keyCount := range []int64{100, 1000, 10000} { for _, readAmp := range []int{1, 3, 7, 10} { @@ -2601,7 +2603,7 @@ func BenchmarkIteratorScan(b *testing.B) { for _, ks := range testkeys.Divvy(keys, int64(readAmp)) { batch := d.NewBatch() for i := int64(0); i < ks.Count(); i++ { - n := testkeys.WriteKeyAt(keyBuf[:], ks, i, rng.Int63n(100)) + n := testkeys.WriteKeyAt(keyBuf[:], ks, i, rng.Int64N(100)) batch.Set(keyBuf[:n], keyBuf[:n], nil) } require.NoError(b, batch.Commit(nil)) @@ -2722,7 +2724,7 @@ func BenchmarkIteratorScanNextPrefix(b *testing.B) { func BenchmarkCombinedIteratorSeek(b *testing.B) { for _, withRangeKey := range []bool{false, true} { b.Run(fmt.Sprintf("range-key=%t", withRangeKey), func(b *testing.B) { - rng := rand.New(rand.NewSource(uint64(1658872515083979000))) + rng := rand.New(rand.NewPCG(0, uint64(1658872515083979000))) ks := testkeys.Alpha(1) opts := &Options{ FS: vfs.NewMem(), @@ -2737,7 +2739,9 @@ func BenchmarkCombinedIteratorSeek(b *testing.B) { for i := int64(0); i < ks.Count(); i++ { keys[i] = testkeys.Key(ks, i) var val [40]byte - rng.Read(val[:]) + for j := range val { + val[j] = byte(rng.Uint32()) + } require.NoError(b, d.Set(keys[i], val[:], nil)) } if withRangeKey { @@ -2821,7 +2825,7 @@ func BenchmarkCombinedIteratorSeekPrefix(b *testing.B) { } func buildFragmentedRangeKey(b testing.TB, seed uint64) (d *DB, keys [][]byte) { - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) ks := testkeys.Alpha(2) opts := &Options{ FS: vfs.NewMem(), @@ -2843,7 +2847,9 @@ func buildFragmentedRangeKey(b testing.TB, seed uint64) (d *DB, keys [][]byte) { } for i := 0; i < len(keys); i++ { var val [40]byte - rng.Read(val[:]) + for j := range val { + val[j] = byte(rng.Uint32()) + } require.NoError(b, d.Set(keys[i], val[:], nil)) if i < len(keys)-1 { require.NoError(b, d.RangeKeySet(keys[i], keys[i+1], []byte("@5"), nil, nil)) diff --git a/pebble/level_iter_test.go b/pebble/level_iter_test.go index 63d448e68..eb1519c43 100644 --- a/pebble/level_iter_test.go +++ b/pebble/level_iter_test.go @@ -8,6 +8,7 @@ import ( "bytes" "context" "fmt" + "math/rand/v2" "strings" "testing" "time" @@ -24,7 +25,6 @@ import ( "github.com/cockroachdb/pebble/sstable" "github.com/cockroachdb/pebble/vfs" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) const ( @@ -532,11 +532,11 @@ func BenchmarkLevelIterSeekGE(b *testing.B) { return iter, nil, err } l := newLevelIter(context.Background(), IterOptions{}, DefaultComparer, newIters, metas.Iter(), manifest.Level(level), internalIterOpts{}) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() for i := 0; i < b.N; i++ { - l.SeekGE(keys[rng.Intn(len(keys))], base.SeekGEFlagsNone) + l.SeekGE(keys[rng.IntN(len(keys))], base.SeekGEFlagsNone) } l.Close() }) diff --git a/pebble/mem_table_test.go b/pebble/mem_table_test.go index 62ea9c60f..b82c749c9 100644 --- a/pebble/mem_table_test.go +++ b/pebble/mem_table_test.go @@ -8,6 +8,7 @@ import ( "bytes" "context" "fmt" + "math/rand/v2" "strconv" "strings" "sync/atomic" @@ -21,7 +22,6 @@ import ( "github.com/cockroachdb/pebble/internal/itertest" "github.com/cockroachdb/pebble/internal/rangekey" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" "golang.org/x/sync/errgroup" ) @@ -193,9 +193,9 @@ func TestMemTable1000Entries(t *testing.T) { t.Fatalf("count: got %v, want %v", got, want) } // Check random-access lookup. - r := rand.New(rand.NewSource(0)) + r := rand.New(rand.NewPCG(0, 0)) for i := 0; i < 3*N; i++ { - j := r.Intn(N) + j := r.IntN(N) k := []byte(strconv.Itoa(j)) v, err := m0.get(k) require.NoError(t, err) @@ -418,11 +418,11 @@ func buildMemTable(b *testing.B) (*memTable, [][]byte) { func BenchmarkMemTableIterSeekGE(b *testing.B) { m, keys := buildMemTable(b) iter := m.newIter(nil) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() for i := 0; i < b.N; i++ { - iter.SeekGE(keys[rng.Intn(len(keys))], base.SeekGEFlagsNone) + iter.SeekGE(keys[rng.IntN(len(keys))], base.SeekGEFlagsNone) } } diff --git a/pebble/merging_iter_test.go b/pebble/merging_iter_test.go index 2e3d994af..5efcfcca7 100644 --- a/pebble/merging_iter_test.go +++ b/pebble/merging_iter_test.go @@ -7,6 +7,7 @@ package pebble import ( "context" "fmt" + "math/rand/v2" "strings" "testing" "time" @@ -23,7 +24,6 @@ import ( "github.com/cockroachdb/pebble/sstable" "github.com/cockroachdb/pebble/vfs" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestMergingIter(t *testing.T) { @@ -36,9 +36,9 @@ func TestMergingIter(t *testing.T) { // Shuffle testKeyValuePairs into one or more splits. Each individual // split is in increasing order, but different splits may overlap in // range. Some of the splits may be empty. - splits := make([][]string, 1+r.Intn(2+len(testKeyValuePairs))) + splits := make([][]string, 1+r.IntN(2+len(testKeyValuePairs))) for _, kv := range testKeyValuePairs { - j := r.Intn(len(splits)) + j := r.IntN(len(splits)) splits[j] = append(splits[j], kv) } return splits @@ -322,7 +322,7 @@ func buildMergingIterTables( key := []byte(fmt.Sprintf("%08d", i)) keys = append(keys, key) ikey.UserKey = key - j := rand.Intn(len(writers)) + j := rand.IntN(len(writers)) w := writers[j] w.Add(ikey, nil) } @@ -378,11 +378,11 @@ func BenchmarkMergingIterSeekGE(b *testing.B) { var stats base.InternalIteratorStats m := newMergingIter(nil /* logger */, &stats, DefaultComparer.Compare, func(a []byte) int { return len(a) }, iters...) - rng := rand.New(rand.NewSource(uint64(time.Now().UnixNano()))) + rng := rand.New(rand.NewPCG(0, uint64(time.Now().UnixNano()))) b.ResetTimer() for i := 0; i < b.N; i++ { - m.SeekGE(keys[rng.Intn(len(keys))], base.SeekGEFlagsNone) + m.SeekGE(keys[rng.IntN(len(keys))], base.SeekGEFlagsNone) } m.Close() }) diff --git a/pebble/metamorphic/generator.go b/pebble/metamorphic/generator.go index 8e7e6d45b..cdbea09f5 100644 --- a/pebble/metamorphic/generator.go +++ b/pebble/metamorphic/generator.go @@ -7,12 +7,12 @@ package metamorphic import ( "bytes" "fmt" + "math/rand/v2" "slices" "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/internal/randvar" "github.com/cockroachdb/pebble/internal/testkeys" - "golang.org/x/exp/rand" ) const maxValueSize = 20 @@ -222,7 +222,7 @@ func (g *generator) randPrefixToWrite(newPrefix float64) []byte { prefixes := g.keyManager.prefixes() if len(prefixes) > 0 && g.rng.Float64() > newPrefix { // Use an existing prefix. - p := g.rng.Intn(len(prefixes)) + p := g.rng.IntN(len(prefixes)) return prefixes[p] } @@ -261,7 +261,7 @@ func (g *generator) randSuffixToRead() []byte { // When reading, don't apply the recency skewing in order to better exercise // a reading a mix of older and newer keys. max := g.cfg.writeSuffixDist.Max() - return suffixFromInt(g.rng.Int63n(int64(max))) + return suffixFromInt(g.rng.Int64N(int64(max))) } func suffixFromInt(suffix int64) []byte { @@ -279,7 +279,7 @@ func (g *generator) randKeyToSingleDelete(id, dbID objID) []byte { if length == 0 { return nil } - return keys[g.rng.Intn(length)] + return keys[g.rng.IntN(length)] } // randKeyToRead returns a key for read operations. @@ -299,7 +299,7 @@ func (g *generator) randKeyHelper( switch { case len(keys) > 0 && g.rng.Float64() > newKey: // Use an existing user key. - return keys[g.rng.Intn(len(keys))] + return keys[g.rng.IntN(len(keys))] case len(keys) > 0 && g.rng.Float64() > g.cfg.newPrefix: // Use an existing prefix but a new suffix, producing a new user key. @@ -317,7 +317,7 @@ func (g *generator) randKeyHelper( for { // Pick a prefix on each iteration in case most or all suffixes are // already in use for any individual prefix. - p := g.rng.Intn(len(prefixes)) + p := g.rng.IntN(len(prefixes)) suffix := int64(g.cfg.writeSuffixDist.Uint64(g.rng)) var key []byte @@ -354,7 +354,7 @@ func (g *generator) randKeyHelper( // If we have bounds in which we need to generate the key, use // testkeys.RandomSeparator to generate a key between the bounds. if newKeyBounds != nil { - targetLength := 4 + g.rng.Intn(8) + targetLength := 4 + g.rng.IntN(8) key = testkeys.RandomSeparator(nil, g.prefix(newKeyBounds.Start), g.prefix(newKeyBounds.End), suffix, targetLength, g.rng) } else { @@ -379,7 +379,7 @@ func (g *generator) randKeyHelperSuffix( ) []byte { n := minPrefixLen if maxPrefixLen > minPrefixLen { - n += g.rng.Intn(maxPrefixLen - minPrefixLen) + n += g.rng.IntN(maxPrefixLen - minPrefixLen) } // In order to test a mix of suffixed and unsuffixed keys, omit the zero // suffix. @@ -407,7 +407,7 @@ func resizeBuffer(buf []byte, prefixLen, suffixLen int) []byte { func (g *generator) randValue(min, max int) []byte { n := min if max > min { - n += g.rng.Intn(max - min) + n += g.rng.IntN(max - min) } if n == 0 { return nil @@ -548,7 +548,7 @@ func (g *generator) dbCheckpoint() { // 1/8 of the time we restrict to 2 spans; etc. numSpans := 0 var spans []pebble.CheckpointSpan - for g.rng.Intn(2) == 0 { + for g.rng.IntN(2) == 0 { numSpans++ } if numSpans > 0 { @@ -598,7 +598,7 @@ func (g *generator) dbRatchetFormatMajorVersion() { dbID := g.dbs.rand(g.rng) n := int(newestFormatMajorVersionToTest - minimumFormatMajorVersion) - vers := pebble.FormatMajorVersion(g.rng.Intn(n+1)) + minimumFormatMajorVersion + vers := pebble.FormatMajorVersion(g.rng.IntN(n+1)) + minimumFormatMajorVersion g.add(&dbRatchetFormatMajorVersionOp{dbID: dbID, vers: vers}) } @@ -638,7 +638,7 @@ func (g *generator) maybeSetSnapshotIterBounds(readerID objID, opts *iterOpts) b return false } // Pick a random keyrange within one of the snapshot's key ranges. - parentBounds := snapBounds[g.rng.Intn(len(snapBounds))] + parentBounds := snapBounds[g.rng.IntN(len(snapBounds))] // With 10% probability, use the parent start bound as-is. if g.rng.Float64() <= 0.1 { opts.lower = parentBounds.Start @@ -648,7 +648,7 @@ func (g *generator) maybeSetSnapshotIterBounds(readerID objID, opts *iterOpts) b parentBounds.Start, parentBounds.End, 0, /* suffix */ - 4+g.rng.Intn(8), + 4+g.rng.IntN(8), g.rng, ) } @@ -661,7 +661,7 @@ func (g *generator) maybeSetSnapshotIterBounds(readerID objID, opts *iterOpts) b opts.lower, parentBounds.End, 0, /* suffix */ - 4+g.rng.Intn(8), + 4+g.rng.IntN(8), g.rng, ) } @@ -708,7 +708,7 @@ func (g *generator) newIter() { // ensure determinism. if g.rng.Float64() <= 0.1 { max := g.cfg.writeSuffixDist.Max() - opts.filterMin, opts.filterMax = g.rng.Uint64n(max)+1, g.rng.Uint64n(max)+1 + opts.filterMin, opts.filterMax = g.rng.Uint64N(max)+1, g.rng.Uint64N(max)+1 if opts.filterMin > opts.filterMax { opts.filterMin, opts.filterMax = opts.filterMax, opts.filterMin } else if opts.filterMin == opts.filterMax { @@ -741,7 +741,7 @@ func (g *generator) randKeyTypesAndMask() (keyTypes uint32, maskSuffix []byte) { case p < 0.8: // 60% probability keyTypes = uint32(pebble.IterKeyTypePointsAndRanges) // With 50% probability, enable masking. - if g.rng.Intn(2) == 1 { + if g.rng.IntN(2) == 1 { maskSuffix = g.randSuffixToRead() } default: // 20% probability @@ -784,13 +784,13 @@ func (g *generator) newIterUsingClone() { var refreshBatch bool if readerID.tag() == batchTag { - refreshBatch = g.rng.Intn(2) == 1 + refreshBatch = g.rng.IntN(2) == 1 } opts := g.itersLastOpts[existingIterID] // With 50% probability, consider modifying the iterator options used by the // clone. - if g.rng.Intn(2) == 1 { + if g.rng.IntN(2) == 1 { g.maybeMutateOptions(readerID, &opts) } g.itersLastOpts[iterID] = opts @@ -1004,7 +1004,7 @@ func (g *generator) iterSeekPrefixGE(iterID objID) { // batches which haven't been presisted to the DB. But we're only picking // keys in a best effort manner, and the logic is better than picking a // random key. - if g.rng.Intn(10) >= 1 { + if g.rng.IntN(10) >= 1 { possibleKeys := make([][]byte, 0, 100) inRangeKeys := g.randKeyToReadWithinBounds(lower, upper, g.objDB[iterID]) for _, keyMeta := range inRangeKeys { @@ -1027,7 +1027,7 @@ func (g *generator) iterSeekPrefixGE(iterID objID) { } if len(possibleKeys) > 0 { - key = []byte(possibleKeys[g.rng.Int31n(int32(len(possibleKeys)))]) + key = []byte(possibleKeys[g.rng.Int32N(int32(len(possibleKeys)))]) } } @@ -1148,7 +1148,7 @@ func (g *generator) readerGet() { // ranges, restrict the read to fall within one of the provided key ranges. var key []byte if bounds := g.snapshotBounds[readerID]; len(bounds) > 0 { - kr := bounds[g.rng.Intn(len(bounds))] + kr := bounds[g.rng.IntN(len(bounds))] key = g.randKeyToReadInRange(0.001, kr) // 0.1% new keys } else { key = g.randKeyToRead(0.001) // 0.1% new keys @@ -1238,7 +1238,7 @@ func (g *generator) newSnapshot() { // (eg. replicateOp) to work. if g.rng.Float64() < 0.75 || g.dbs.Len() > 1 { s.bounds = g.generateDisjointKeyRanges( - g.rng.Intn(5) + 1, /* between 1-5 */ + g.rng.IntN(5) + 1, /* between 1-5 */ ) g.snapshotBounds[snapID] = s.bounds } @@ -1421,7 +1421,7 @@ func (g *generator) writerIngest() { dbID := g.dbs.rand(g.rng) // Ingest between 1 and 3 batches. - batchIDs := make([]objID, 0, 1+g.rng.Intn(3)) + batchIDs := make([]objID, 0, 1+g.rng.IntN(3)) canFail := cap(batchIDs) > 1 for i := 0; i < cap(batchIDs); i++ { batchID := g.liveBatches.rand(g.rng) @@ -1509,21 +1509,21 @@ func (g *generator) maybeMutateOptions(readerID objID, opts *iterOpts) { // With 95% probability, allow changes to any options at all. This ensures // that in 5% of cases there are no changes, and SetOptions hits its fast // path. - if g.rng.Intn(100) >= 5 { + if g.rng.IntN(100) >= 5 { if !g.maybeSetSnapshotIterBounds(readerID, opts) { // With 1/3 probability, clear existing bounds. - if opts.lower != nil && g.rng.Intn(3) == 0 { + if opts.lower != nil && g.rng.IntN(3) == 0 { opts.lower = nil } - if opts.upper != nil && g.rng.Intn(3) == 0 { + if opts.upper != nil && g.rng.IntN(3) == 0 { opts.upper = nil } // With 1/3 probability, update the bounds. - if g.rng.Intn(3) == 0 { + if g.rng.IntN(3) == 0 { // Generate a new key with a .1% probability. opts.lower = g.randKeyToRead(0.001) } - if g.rng.Intn(3) == 0 { + if g.rng.IntN(3) == 0 { // Generate a new key with a .1% probability. opts.upper = g.randKeyToRead(0.001) } @@ -1533,18 +1533,18 @@ func (g *generator) maybeMutateOptions(readerID objID, opts *iterOpts) { } // With 1/3 probability, update the key-types/mask. - if g.rng.Intn(3) == 0 { + if g.rng.IntN(3) == 0 { opts.keyTypes, opts.maskSuffix = g.randKeyTypesAndMask() } // With 1/3 probability, clear existing filter. - if opts.filterMax > 0 && g.rng.Intn(3) == 0 { + if opts.filterMax > 0 && g.rng.IntN(3) == 0 { opts.filterMax, opts.filterMin = 0, 0 } // With 10% probability, set a filter range. - if g.rng.Intn(10) == 1 { + if g.rng.IntN(10) == 1 { max := g.cfg.writeSuffixDist.Max() - opts.filterMin, opts.filterMax = g.rng.Uint64n(max)+1, g.rng.Uint64n(max)+1 + opts.filterMin, opts.filterMax = g.rng.Uint64N(max)+1, g.rng.Uint64N(max)+1 if opts.filterMin > opts.filterMax { opts.filterMin, opts.filterMax = opts.filterMax, opts.filterMin } else if opts.filterMin == opts.filterMax { @@ -1559,7 +1559,7 @@ func (g *generator) maybeMutateOptions(readerID objID, opts *iterOpts) { } func (g *generator) pickOneUniform(options ...func(objID)) func(objID) { - i := g.rng.Intn(len(options)) + i := g.rng.IntN(len(options)) return options[i] } diff --git a/pebble/metamorphic/generator_test.go b/pebble/metamorphic/generator_test.go index e1e74c4aa..e8f798c73 100644 --- a/pebble/metamorphic/generator_test.go +++ b/pebble/metamorphic/generator_test.go @@ -6,6 +6,7 @@ package metamorphic import ( "fmt" + "math/rand/v2" "testing" "time" @@ -13,7 +14,6 @@ import ( "github.com/cockroachdb/pebble/internal/randvar" "github.com/pmezard/go-difflib/difflib" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" ) func TestGenerator(t *testing.T) { @@ -131,7 +131,7 @@ func TestGeneratorRandom(t *testing.T) { ops := randvar.NewUniform(1000, 10000) cfgs := []string{"default", "multiInstance"} generateFromSeed := func(cfg config) string { - rng := rand.New(rand.NewSource(seed)) + rng := rand.New(rand.NewPCG(0, seed)) count := ops.Uint64(rng) return formatOps(generate(rng, count, cfg, newKeyManager(cfg.numInstances))) } diff --git a/pebble/metamorphic/meta.go b/pebble/metamorphic/meta.go index 12fe3bc33..81f99af93 100644 --- a/pebble/metamorphic/meta.go +++ b/pebble/metamorphic/meta.go @@ -12,6 +12,7 @@ import ( "context" "fmt" "io" + "math/rand/v2" "os" "os/exec" "path" @@ -30,7 +31,6 @@ import ( "github.com/cockroachdb/pebble/vfs/errorfs" "github.com/pmezard/go-difflib/difflib" "github.com/stretchr/testify/require" - "golang.org/x/exp/rand" "golang.org/x/sync/errgroup" ) @@ -161,13 +161,13 @@ func RunAndCompare(t *testing.T, rootDir string, rOpts ...RunOption) { } }() - rng := rand.New(rand.NewSource(runOpts.seed)) + rng := rand.New(rand.NewPCG(0, runOpts.seed)) opCount := runOpts.ops.Uint64(rng) // Generate a new set of random ops, writing them to
=p for i =p for i