don't spawn a goroutine for scheduling connections

This commit is contained in:
vyzo 2019-12-06 17:22:49 +02:00
parent efb09f2984
commit 5b0ec14ea7

View File

@ -47,6 +47,9 @@ var (
// number of active connection attempts for peers obtained through px // number of active connection attempts for peers obtained through px
GossipSubConnectors = 16 GossipSubConnectors = 16
// maximum number of pending connections for peers attempted through px
GossipSubMaxPendingConnections = 1024
// timeout for connection attempts // timeout for connection attempts
GossipSubConnectionTimeout = 30 * time.Second GossipSubConnectionTimeout = 30 * time.Second
) )
@ -61,7 +64,7 @@ func NewGossipSub(ctx context.Context, h host.Host, opts ...Option) (*PubSub, er
gossip: make(map[peer.ID][]*pb.ControlIHave), gossip: make(map[peer.ID][]*pb.ControlIHave),
control: make(map[peer.ID]*pb.ControlMessage), control: make(map[peer.ID]*pb.ControlMessage),
backoff: make(map[string]map[peer.ID]time.Time), backoff: make(map[string]map[peer.ID]time.Time),
connect: make(chan connectInfo, GossipSubConnectors), connect: make(chan connectInfo, GossipSubMaxPendingConnections),
mcache: NewMessageCache(GossipSubHistoryGossip, GossipSubHistoryLength), mcache: NewMessageCache(GossipSubHistoryGossip, GossipSubHistoryLength),
} }
return NewPubSub(ctx, h, rt, opts...) return NewPubSub(ctx, h, rt, opts...)
@ -325,16 +328,14 @@ func (gs *GossipSubRouter) pxConnect(peers []*pb.PeerInfo) {
return return
} }
// initiate connections, without blocking the event loop for _, ci := range toconnect {
go func() { select {
for _, ci := range toconnect { case gs.connect <- ci:
select { default:
case gs.connect <- ci: log.Debugf("ignoring peer connection attempt; too many pending connections")
case <-gs.p.ctx.Done(): break
return
}
} }
}() }
} }
func (gs *GossipSubRouter) connector() { func (gs *GossipSubRouter) connector() {