Skip to content

Commit e7bd4b9

Browse files
committed
use pointers to optimise equalTopologies func
1 parent 7a0895d commit e7bd4b9

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

x/mongo/driver/topology/topology.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -809,14 +809,14 @@ func equalTopologies(topo1, topo2 description.Topology) bool {
809809
return false
810810
}
811811

812-
topoServers := make(map[string]description.Server, len(topo1.Servers))
813-
for _, s := range topo1.Servers {
814-
topoServers[s.Addr.String()] = s
812+
topoServers := make(map[string]*description.Server, len(topo1.Servers))
813+
for i := range topo1.Servers {
814+
topoServers[topo1.Servers[i].Addr.String()] = &topo1.Servers[i]
815815
}
816816

817-
otherServers := make(map[string]description.Server, len(topo2.Servers))
818-
for _, s := range topo2.Servers {
819-
otherServers[s.Addr.String()] = s
817+
otherServers := make(map[string]*description.Server, len(topo2.Servers))
818+
for i := range topo2.Servers {
819+
otherServers[topo2.Servers[i].Addr.String()] = &topo2.Servers[i]
820820
}
821821

822822
if len(topoServers) != len(otherServers) {
@@ -826,7 +826,7 @@ func equalTopologies(topo1, topo2 description.Topology) bool {
826826
for _, server := range topoServers {
827827
otherServer := otherServers[server.Addr.String()]
828828

829-
if !driverutil.EqualServers(server, otherServer) {
829+
if !driverutil.EqualServers(*server, *otherServer) {
830830
return false
831831
}
832832
}

x/mongo/driver/topology/topology_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"fmt"
1313
"io/ioutil"
1414
"path"
15+
"strconv"
1516
"sync/atomic"
1617
"testing"
1718
"time"
@@ -1040,3 +1041,28 @@ func BenchmarkSelectServerFromDescription(b *testing.B) {
10401041
})
10411042
}
10421043
}
1044+
1045+
func BenchmarkEqualTopologies(b *testing.B) {
1046+
servers := make([]description.Server, 100)
1047+
for i := 0; i < len(servers); i++ {
1048+
servers[i] = description.Server{
1049+
Addr: address.Address("127.0.0." + strconv.Itoa(i) + ":27017"),
1050+
HeartbeatInterval: time.Duration(10) * time.Second,
1051+
LastWriteTime: time.Date(2017, 2, 11, 14, 0, 0, 0, time.UTC),
1052+
LastUpdateTime: time.Date(2017, 2, 11, 14, 0, 2, 0, time.UTC),
1053+
Kind: description.ServerKindMongos,
1054+
WireVersion: &description.VersionRange{Min: 6, Max: 21},
1055+
}
1056+
}
1057+
desc := description.Topology{
1058+
Servers: servers,
1059+
}
1060+
1061+
b.ResetTimer()
1062+
b.RunParallel(func(p *testing.PB) {
1063+
b.ReportAllocs()
1064+
for p.Next() {
1065+
_ = equalTopologies(desc, desc)
1066+
}
1067+
})
1068+
}

0 commit comments

Comments
 (0)