filter peers with negative score in initial mesh on join

This commit is contained in:
vyzo 2020-03-02 15:13:15 +02:00
parent c13e9c07e4
commit f9ce661bda
1 changed files with 8 additions and 3 deletions

View File

@ -511,9 +511,10 @@ func (gs *GossipSubRouter) Join(topic string) {
if len(gmap) < GossipSubD { if len(gmap) < GossipSubD {
// we need more peers; eager, as this would get fixed in the next heartbeat // we need more peers; eager, as this would get fixed in the next heartbeat
more := gs.getPeers(topic, GossipSubD-len(gmap), func(p peer.ID) bool { more := gs.getPeers(topic, GossipSubD-len(gmap), func(p peer.ID) bool {
// filter our current peers // filter our current peers and peers with negative scores
_, ok := gmap[p] _, ok := gmap[p]
return !ok score := gs.score.Score(p)
return !ok && score >= 0
}) })
for _, p := range more { for _, p := range more {
gmap[p] = struct{}{} gmap[p] = struct{}{}
@ -523,7 +524,11 @@ func (gs *GossipSubRouter) Join(topic string) {
delete(gs.fanout, topic) delete(gs.fanout, topic)
delete(gs.lastpub, topic) delete(gs.lastpub, topic)
} else { } else {
peers := gs.getPeers(topic, GossipSubD, func(peer.ID) bool { return true }) peers := gs.getPeers(topic, GossipSubD, func(p peer.ID) bool {
// filter peers with negative score
score := gs.score.Score(p)
return score >= 0
})
gmap = peerListToMap(peers) gmap = peerListToMap(peers)
gs.mesh[topic] = gmap gs.mesh[topic] = gmap
} }