@@ -300,32 +300,69 @@ func BenchmarkLatencySelector(b *testing.B) {
300
300
}
301
301
302
302
func BenchmarkSelector_Sharded (b * testing.B ) {
303
- subject := readpref .Primary ()
303
+ for _ , bcase := range []struct {
304
+ name string
305
+ serversHook func (servers []Server )
306
+ }{
307
+ {
308
+ name : "AllFit" ,
309
+ serversHook : func (servers []Server ) {},
310
+ },
311
+ {
312
+ name : "AllButOneFit" ,
313
+ serversHook : func (servers []Server ) {
314
+ servers [0 ].Kind = LoadBalancer
315
+ },
316
+ },
317
+ {
318
+ name : "HalfFit" ,
319
+ serversHook : func (servers []Server ) {
320
+ for i := 0 ; i < len (servers ); i += 2 {
321
+ servers [i ].Kind = LoadBalancer
322
+ }
323
+ },
324
+ },
325
+ {
326
+ name : "OneFit" ,
327
+ serversHook : func (servers []Server ) {
328
+ for i := 1 ; i < len (servers ); i ++ {
329
+ servers [i ].Kind = LoadBalancer
330
+ }
331
+ },
332
+ },
333
+ } {
334
+ bcase := bcase
304
335
305
- s := Server {
306
- Addr : address .Address ("localhost:27017" ),
307
- HeartbeatInterval : time .Duration (10 ) * time .Second ,
308
- LastWriteTime : time .Date (2017 , 2 , 11 , 14 , 0 , 0 , 0 , time .UTC ),
309
- LastUpdateTime : time .Date (2017 , 2 , 11 , 14 , 0 , 2 , 0 , time .UTC ),
310
- Kind : Mongos ,
311
- WireVersion : & VersionRange {Min : 0 , Max : 5 },
312
- }
313
- servers := make ([]Server , 100 )
314
- for i := 0 ; i < len (servers ); i ++ {
315
- servers [i ] = s
316
- }
317
- servers [0 ].Kind = LoadBalancer
318
- c := Topology {
319
- Kind : Sharded ,
320
- Servers : servers ,
321
- }
336
+ b .Run (bcase .name , func (b * testing.B ) {
337
+ subject := readpref .Primary ()
322
338
323
- b .ResetTimer ()
324
- b .RunParallel (func (p * testing.PB ) {
325
- for p .Next () {
326
- _ , _ = ReadPrefSelector (subject ).SelectServer (c , c .Servers )
327
- }
328
- })
339
+ s := Server {
340
+ Addr : address .Address ("localhost:27017" ),
341
+ HeartbeatInterval : time .Duration (10 ) * time .Second ,
342
+ LastWriteTime : time .Date (2017 , 2 , 11 , 14 , 0 , 0 , 0 , time .UTC ),
343
+ LastUpdateTime : time .Date (2017 , 2 , 11 , 14 , 0 , 2 , 0 , time .UTC ),
344
+ Kind : Mongos ,
345
+ WireVersion : & VersionRange {Min : 0 , Max : 5 },
346
+ }
347
+ servers := make ([]Server , 100 )
348
+ for i := 0 ; i < len (servers ); i ++ {
349
+ servers [i ] = s
350
+ }
351
+ bcase .serversHook (servers )
352
+ c := Topology {
353
+ Kind : Sharded ,
354
+ Servers : servers ,
355
+ }
356
+
357
+ b .ResetTimer ()
358
+ b .RunParallel (func (p * testing.PB ) {
359
+ b .ReportAllocs ()
360
+ for p .Next () {
361
+ _ , _ = ReadPrefSelector (subject ).SelectServer (c , c .Servers )
362
+ }
363
+ })
364
+ })
365
+ }
329
366
}
330
367
331
368
func TestSelector_Single (t * testing.T ) {
0 commit comments