Skip to content

Commit 6d920fc

Browse files
committed
remove global rand
1 parent 93e75f0 commit 6d920fc

File tree

1 file changed

+33
-21
lines changed

1 file changed

+33
-21
lines changed

redis-zbench-go.go

+33-21
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ var replySizes []uint64
2525
const Inf = rate.Limit(math.MaxFloat64)
2626
const charset = "abcdefghijklmnopqrstuvwxyz"
2727

28-
func stringWithCharset(length int, charset string) string {
28+
func stringWithCharset(length int, charset string, r *rand.Rand) string {
2929

3030
b := make([]byte, length)
3131
for i := range b {
32-
b[i] = charset[rand.Intn(len(charset))]
32+
b[i] = charset[r.Intn(len(charset))]
3333
}
3434
return string(b)
3535
}
@@ -57,6 +57,7 @@ func main() {
5757
query := flag.String("query", "zrangebyscore", "Query type.")
5858

5959
flag.Parse()
60+
6061
git_sha := toolGitSHA1()
6162
git_dirty_str := ""
6263
if toolGitDirty() {
@@ -111,7 +112,6 @@ func main() {
111112
if *clusterMode {
112113
cluster = getOSSClusterConn(connectionStr, opts, *clients)
113114
}
114-
rand.Seed(*seed)
115115
var connectionPool *radix.Pool = getStandaloneConn(connectionStr, opts, *clients)
116116
for client_id := 1; uint64(client_id) <= *clients; client_id++ {
117117
wg.Add(1)
@@ -122,29 +122,29 @@ func main() {
122122
}
123123
if isLoad {
124124
if *clusterMode {
125-
go loadGoRoutime(cluster, keyspace_client_start, keyspace_client_end, samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
125+
go loadGoRoutime(cluster, keyspace_client_start, keyspace_client_end, samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
126126
} else {
127-
go loadGoRoutime(connectionPool, keyspace_client_start, keyspace_client_end, samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
127+
go loadGoRoutime(connectionPool, keyspace_client_start, keyspace_client_end, samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
128128
}
129129
} else {
130130
switch *query {
131131
case "zrange-byscore-rev":
132132
if *clusterMode {
133-
go queryGoRoutimeZrevrangeByScore(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
133+
go queryGoRoutimeZrevrangeByScore(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
134134
} else {
135-
go queryGoRoutimeZrevrangeByScore(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
135+
go queryGoRoutimeZrevrangeByScore(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
136136
}
137137
case "zrange-byscore":
138138
if *clusterMode {
139-
go queryGoRoutimeZrangeByScore(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
139+
go queryGoRoutimeZrangeByScore(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
140140
} else {
141-
go queryGoRoutimeZrangeByScore(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
141+
go queryGoRoutimeZrangeByScore(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
142142
}
143143
case "zrevrangebylex":
144144
if *clusterMode {
145-
go queryGoRoutimeZrangeByLex(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
145+
go queryGoRoutimeZrangeByLex(cluster, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
146146
} else {
147-
go queryGoRoutimeZrangeByLex(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter)
147+
go queryGoRoutimeZrangeByLex(connectionPool, *multi, uint64(*keyspacelen), samplesPerClient, *pipeline, *perKeyElmDataSize, *perKeyElmRangeStart, *perKeyElmRangeEnd, int(*debug), &wg, useRateLimiter, rateLimiter, *seed + int64(client_id))
148148
}
149149
}
150150
}
@@ -199,8 +199,11 @@ func main() {
199199
wg.Wait()
200200
}
201201

202-
func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter) {
202+
func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter, seed int64) {
203203
defer w.Done()
204+
205+
r := rand.New(rand.NewSource(seed))
206+
204207
var i uint64 = 0
205208
var multiIncr uint64 = 0
206209
var multiPad uint64 = 0
@@ -211,7 +214,7 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
211214
cmds := make([]radix.CmdAction, pipeline+multiIncr)
212215
cmdReplies := make([][]string, pipeline)
213216
for i < samplesPerClient {
214-
key_n := rand.Int63n(int64(keyspace_len))
217+
key_n := r.Int63n(int64(keyspace_len))
215218

216219
if useRateLimiter {
217220
r := rateLimiter.ReserveN(time.Now(), int(pipeline))
@@ -224,7 +227,7 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
224227
}
225228
for j < pipeline {
226229
keyname := getBenchKeyName(uint64(key_n))
227-
cmdArgs := []string{keyname, fmt.Sprintf("[%c", charset[rand.Intn(len(charset))]), "-"}
230+
cmdArgs := []string{keyname, fmt.Sprintf("[%c", charset[r.Intn(len(charset))]), "-"}
228231
cmds[j+multiPad] = radix.Cmd(nil, "ZREVRANGEBYLEX", cmdArgs...)
229232
j = j + 1
230233
key_n = key_n + crc16_num_slots
@@ -252,8 +255,11 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
252255
}
253256
}
254257

255-
func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter) {
258+
func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter, seed int64) {
256259
defer w.Done()
260+
261+
r := rand.New(rand.NewSource(seed))
262+
257263
var i uint64 = 0
258264
var multiIncr uint64 = 0
259265
var multiPad uint64 = 0
@@ -264,7 +270,7 @@ func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uin
264270
cmds := make([]radix.CmdAction, pipeline+multiIncr)
265271
cmdReplies := make([][]string, pipeline)
266272
for i < samplesPerClient {
267-
key_n := rand.Int63n(int64(keyspace_len))
273+
key_n := r.Int63n(int64(keyspace_len))
268274

269275
if useRateLimiter {
270276
r := rateLimiter.ReserveN(time.Now(), int(pipeline))
@@ -305,8 +311,11 @@ func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uin
305311
}
306312
}
307313

308-
func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter) {
314+
func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter, seed int64) {
309315
defer w.Done()
316+
317+
r := rand.New(rand.NewSource(seed))
318+
310319
var i uint64 = 0
311320
var multiIncr uint64 = 0
312321
var multiPad uint64 = 0
@@ -317,7 +326,7 @@ func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len
317326
cmds := make([]radix.CmdAction, pipeline+multiIncr)
318327
cmdReplies := make([][]string, pipeline)
319328
for i < samplesPerClient {
320-
key_n := rand.Int63n(int64(keyspace_len))
329+
key_n := r.Int63n(int64(keyspace_len))
321330

322331
if useRateLimiter {
323332
r := rateLimiter.ReserveN(time.Now(), int(pipeline))
@@ -358,8 +367,11 @@ func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len
358367
}
359368
}
360369

361-
func loadGoRoutime(conn radix.Client, keyspace_client_start uint64, keyspace_client_end uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter) {
370+
func loadGoRoutime(conn radix.Client, keyspace_client_start uint64, keyspace_client_end uint64, samplesPerClient uint64, pipeline uint64, perKeyElmDataSize uint64, perKeyElmRangeStart uint64, perKeyElmRangeEnd uint64, debug int, w *sync.WaitGroup, useRateLimiter bool, rateLimiter *rate.Limiter, seed int64) {
362371
defer w.Done()
372+
373+
r := rand.New(rand.NewSource(seed))
374+
363375
var i uint64 = 0
364376
var keypos uint64 = keyspace_client_start
365377
cmds := make([]radix.CmdAction, pipeline)
@@ -372,10 +384,10 @@ func loadGoRoutime(conn radix.Client, keyspace_client_start uint64, keyspace_cli
372384
for ; j < pipeline; j++ {
373385
keyname := getBenchKeyName(keypos)
374386
cmdArgs := []string{keyname}
375-
nElements := rand.Int63n(int64(perKeyElmRangeEnd-perKeyElmRangeStart)) + int64(perKeyElmRangeStart)
387+
nElements := r.Int63n(int64(perKeyElmRangeEnd-perKeyElmRangeStart)) + int64(perKeyElmRangeStart)
376388
var k int64 = 0
377389
for ; k < nElements; k++ {
378-
cmdArgs = append(cmdArgs, fmt.Sprintf("%f", rand.Float32()), stringWithCharset(int(perKeyElmDataSize), charset))
390+
cmdArgs = append(cmdArgs, fmt.Sprintf("%f", r.Float32()), stringWithCharset(int(perKeyElmDataSize), charset, r))
379391
}
380392
atomic.AddUint64(&totalAddedElements, uint64(nElements))
381393
cmds[j] = radix.Cmd(nil, "ZADD", cmdArgs...)

0 commit comments

Comments
 (0)