@@ -25,11 +25,11 @@ var replySizes []uint64
25
25
const Inf = rate .Limit (math .MaxFloat64 )
26
26
const charset = "abcdefghijklmnopqrstuvwxyz"
27
27
28
- func stringWithCharset (length int , charset string ) string {
28
+ func stringWithCharset (length int , charset string , r * rand. Rand ) string {
29
29
30
30
b := make ([]byte , length )
31
31
for i := range b {
32
- b [i ] = charset [rand .Intn (len (charset ))]
32
+ b [i ] = charset [r .Intn (len (charset ))]
33
33
}
34
34
return string (b )
35
35
}
@@ -57,6 +57,7 @@ func main() {
57
57
query := flag .String ("query" , "zrangebyscore" , "Query type." )
58
58
59
59
flag .Parse ()
60
+
60
61
git_sha := toolGitSHA1 ()
61
62
git_dirty_str := ""
62
63
if toolGitDirty () {
@@ -111,7 +112,6 @@ func main() {
111
112
if * clusterMode {
112
113
cluster = getOSSClusterConn (connectionStr , opts , * clients )
113
114
}
114
- rand .Seed (* seed )
115
115
var connectionPool * radix.Pool = getStandaloneConn (connectionStr , opts , * clients )
116
116
for client_id := 1 ; uint64 (client_id ) <= * clients ; client_id ++ {
117
117
wg .Add (1 )
@@ -122,29 +122,29 @@ func main() {
122
122
}
123
123
if isLoad {
124
124
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 ) )
126
126
} 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 ) )
128
128
}
129
129
} else {
130
130
switch * query {
131
131
case "zrange-byscore-rev" :
132
132
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 ) )
134
134
} 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 ) )
136
136
}
137
137
case "zrange-byscore" :
138
138
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 ) )
140
140
} 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 ) )
142
142
}
143
143
case "zrevrangebylex" :
144
144
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 ) )
146
146
} 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 ) )
148
148
}
149
149
}
150
150
}
@@ -199,8 +199,11 @@ func main() {
199
199
wg .Wait ()
200
200
}
201
201
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 ) {
203
203
defer w .Done ()
204
+
205
+ r := rand .New (rand .NewSource (seed ))
206
+
204
207
var i uint64 = 0
205
208
var multiIncr uint64 = 0
206
209
var multiPad uint64 = 0
@@ -211,7 +214,7 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
211
214
cmds := make ([]radix.CmdAction , pipeline + multiIncr )
212
215
cmdReplies := make ([][]string , pipeline )
213
216
for i < samplesPerClient {
214
- key_n := rand .Int63n (int64 (keyspace_len ))
217
+ key_n := r .Int63n (int64 (keyspace_len ))
215
218
216
219
if useRateLimiter {
217
220
r := rateLimiter .ReserveN (time .Now (), int (pipeline ))
@@ -224,7 +227,7 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
224
227
}
225
228
for j < pipeline {
226
229
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 ))]), "-" }
228
231
cmds [j + multiPad ] = radix .Cmd (nil , "ZREVRANGEBYLEX" , cmdArgs ... )
229
232
j = j + 1
230
233
key_n = key_n + crc16_num_slots
@@ -252,8 +255,11 @@ func queryGoRoutimeZrangeByLex(conn radix.Client, multi bool, keyspace_len uint6
252
255
}
253
256
}
254
257
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 ) {
256
259
defer w .Done ()
260
+
261
+ r := rand .New (rand .NewSource (seed ))
262
+
257
263
var i uint64 = 0
258
264
var multiIncr uint64 = 0
259
265
var multiPad uint64 = 0
@@ -264,7 +270,7 @@ func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uin
264
270
cmds := make ([]radix.CmdAction , pipeline + multiIncr )
265
271
cmdReplies := make ([][]string , pipeline )
266
272
for i < samplesPerClient {
267
- key_n := rand .Int63n (int64 (keyspace_len ))
273
+ key_n := r .Int63n (int64 (keyspace_len ))
268
274
269
275
if useRateLimiter {
270
276
r := rateLimiter .ReserveN (time .Now (), int (pipeline ))
@@ -305,8 +311,11 @@ func queryGoRoutimeZrangeByScore(conn radix.Client, multi bool, keyspace_len uin
305
311
}
306
312
}
307
313
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 ) {
309
315
defer w .Done ()
316
+
317
+ r := rand .New (rand .NewSource (seed ))
318
+
310
319
var i uint64 = 0
311
320
var multiIncr uint64 = 0
312
321
var multiPad uint64 = 0
@@ -317,7 +326,7 @@ func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len
317
326
cmds := make ([]radix.CmdAction , pipeline + multiIncr )
318
327
cmdReplies := make ([][]string , pipeline )
319
328
for i < samplesPerClient {
320
- key_n := rand .Int63n (int64 (keyspace_len ))
329
+ key_n := r .Int63n (int64 (keyspace_len ))
321
330
322
331
if useRateLimiter {
323
332
r := rateLimiter .ReserveN (time .Now (), int (pipeline ))
@@ -358,8 +367,11 @@ func queryGoRoutimeZrevrangeByScore(conn radix.Client, multi bool, keyspace_len
358
367
}
359
368
}
360
369
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 ) {
362
371
defer w .Done ()
372
+
373
+ r := rand .New (rand .NewSource (seed ))
374
+
363
375
var i uint64 = 0
364
376
var keypos uint64 = keyspace_client_start
365
377
cmds := make ([]radix.CmdAction , pipeline )
@@ -372,10 +384,10 @@ func loadGoRoutime(conn radix.Client, keyspace_client_start uint64, keyspace_cli
372
384
for ; j < pipeline ; j ++ {
373
385
keyname := getBenchKeyName (keypos )
374
386
cmdArgs := []string {keyname }
375
- nElements := rand .Int63n (int64 (perKeyElmRangeEnd - perKeyElmRangeStart )) + int64 (perKeyElmRangeStart )
387
+ nElements := r .Int63n (int64 (perKeyElmRangeEnd - perKeyElmRangeStart )) + int64 (perKeyElmRangeStart )
376
388
var k int64 = 0
377
389
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 ))
379
391
}
380
392
atomic .AddUint64 (& totalAddedElements , uint64 (nElements ))
381
393
cmds [j ] = radix .Cmd (nil , "ZADD" , cmdArgs ... )
0 commit comments