@@ -25,11 +25,11 @@ var replySizes []uint64
2525const Inf = rate .Limit (math .MaxFloat64 )
2626const 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