@@ -835,3 +835,68 @@ func serverKindFromString(t *testing.T, s string) description.ServerKind {
835
835
836
836
return description .Unknown
837
837
}
838
+
839
+ func BenchmarkSelectServerFromDescription (b * testing.B ) {
840
+ for _ , bcase := range []struct {
841
+ name string
842
+ serversHook func (servers []description.Server )
843
+ }{
844
+ {
845
+ name : "AllFit" ,
846
+ serversHook : func (servers []description.Server ) {},
847
+ },
848
+ {
849
+ name : "AllButOneFit" ,
850
+ serversHook : func (servers []description.Server ) {
851
+ servers [0 ].Kind = description .Unknown
852
+ },
853
+ },
854
+ {
855
+ name : "HalfFit" ,
856
+ serversHook : func (servers []description.Server ) {
857
+ for i := 0 ; i < len (servers ); i += 2 {
858
+ servers [i ].Kind = description .Unknown
859
+ }
860
+ },
861
+ },
862
+ {
863
+ name : "OneFit" ,
864
+ serversHook : func (servers []description.Server ) {
865
+ for i := 1 ; i < len (servers ); i ++ {
866
+ servers [i ].Kind = description .Unknown
867
+ }
868
+ },
869
+ },
870
+ } {
871
+ bcase := bcase
872
+
873
+ b .Run (bcase .name , func (b * testing.B ) {
874
+ s := description.Server {
875
+ Addr : address .Address ("localhost:27017" ),
876
+ HeartbeatInterval : time .Duration (10 ) * time .Second ,
877
+ LastWriteTime : time .Date (2017 , 2 , 11 , 14 , 0 , 0 , 0 , time .UTC ),
878
+ LastUpdateTime : time .Date (2017 , 2 , 11 , 14 , 0 , 2 , 0 , time .UTC ),
879
+ Kind : description .Mongos ,
880
+ WireVersion : & description.VersionRange {Min : 0 , Max : 5 },
881
+ }
882
+ servers := make ([]description.Server , 100 )
883
+ for i := 0 ; i < len (servers ); i ++ {
884
+ servers [i ] = s
885
+ }
886
+ bcase .serversHook (servers )
887
+ desc := description.Topology {
888
+ Servers : servers ,
889
+ }
890
+
891
+ timeout := make (chan time.Time )
892
+ b .ResetTimer ()
893
+ b .RunParallel (func (p * testing.PB ) {
894
+ b .ReportAllocs ()
895
+ for p .Next () {
896
+ var c Topology
897
+ _ , _ = c .selectServerFromDescription (desc , newServerSelectionState (selectNone , timeout ))
898
+ }
899
+ })
900
+ })
901
+ }
902
+ }
0 commit comments