mirror of https://github.com/vacp2p/nim-libp2p.git
Gossipsub scoring improvements (#909)
This commit is contained in:
parent
81b861b34e
commit
c45f9705ab
|
@ -155,6 +155,9 @@ method onNewPeer(g: GossipSub, peer: PubSubPeer) =
|
||||||
peer.appScore = stats.appScore
|
peer.appScore = stats.appScore
|
||||||
peer.behaviourPenalty = stats.behaviourPenalty
|
peer.behaviourPenalty = stats.behaviourPenalty
|
||||||
|
|
||||||
|
# Check if the score is below the threshold and disconnect the peer if necessary
|
||||||
|
g.disconnectBadPeerCheck(peer, stats.score)
|
||||||
|
|
||||||
peer.iHaveBudget = IHavePeerBudget
|
peer.iHaveBudget = IHavePeerBudget
|
||||||
peer.pingBudget = PingsPeerBudget
|
peer.pingBudget = PingsPeerBudget
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,11 @@ proc disconnectPeer(g: GossipSub, peer: PubSubPeer) {.async.} =
|
||||||
except CatchableError as exc: # Never cancelled
|
except CatchableError as exc: # Never cancelled
|
||||||
trace "Failed to close connection", peer, error = exc.name, msg = exc.msg
|
trace "Failed to close connection", peer, error = exc.name, msg = exc.msg
|
||||||
|
|
||||||
|
proc disconnectBadPeerCheck*(g: GossipSub, peer: PubSubPeer, score: float64) =
|
||||||
|
if g.parameters.disconnectBadPeers and score < g.parameters.graylistThreshold and
|
||||||
|
peer.peerId notin g.parameters.directPeers:
|
||||||
|
debug "disconnecting bad score peer", peer, score = peer.score
|
||||||
|
asyncSpawn(g.disconnectPeer(peer))
|
||||||
|
|
||||||
proc updateScores*(g: GossipSub) = # avoid async
|
proc updateScores*(g: GossipSub) = # avoid async
|
||||||
## https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#the-score-function
|
## https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#the-score-function
|
||||||
|
@ -241,10 +246,7 @@ proc updateScores*(g: GossipSub) = # avoid async
|
||||||
|
|
||||||
trace "updated peer's score", peer, score = peer.score, n_topics, is_grafted
|
trace "updated peer's score", peer, score = peer.score, n_topics, is_grafted
|
||||||
|
|
||||||
if g.parameters.disconnectBadPeers and stats.score < g.parameters.graylistThreshold and
|
g.disconnectBadPeerCheck(peer, stats.score)
|
||||||
peer.peerId notin g.parameters.directPeers:
|
|
||||||
debug "disconnecting bad score peer", peer, score = peer.score
|
|
||||||
asyncSpawn(g.disconnectPeer(peer))
|
|
||||||
|
|
||||||
libp2p_gossipsub_peers_scores.inc(peer.score, labelValues = [agent])
|
libp2p_gossipsub_peers_scores.inc(peer.score, labelValues = [agent])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue