@@ -300,32 +300,69 @@ func BenchmarkLatencySelector(b *testing.B) {
300300}
301301
302302func 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
304335
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 ()
322338
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+ }
329366}
330367
331368func TestSelector_Single (t * testing.T ) {
0 commit comments