gossipsubv1.1: configure scores for bootstrapper PX
This commit is contained in:
parent
6b56652768
commit
7d7c83ef79
@ -34,16 +34,32 @@ func PubsubTracer() PubsubOpt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GossipSub(pubsubOptions ...PubsubOpt) interface{} {
|
func GossipSub(pubsubOptions ...PubsubOpt) interface{} {
|
||||||
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, nn dtypes.NetworkName) (service *pubsub.PubSub, err error) {
|
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, nn dtypes.NetworkName, bp dtypes.BootstrapPeers) (service *pubsub.PubSub, err error) {
|
||||||
|
bootstrappers := make(map[peer.ID]struct{})
|
||||||
|
for _, pi := range bp {
|
||||||
|
bootstrappers[pi.ID] = struct{}{}
|
||||||
|
}
|
||||||
|
_, isBootstrapNode := bootstrappers[host.ID()]
|
||||||
|
|
||||||
v11Options := []pubsub.Option{
|
v11Options := []pubsub.Option{
|
||||||
// Gossipsubv1.1 configuration
|
// Gossipsubv1.1 configuration
|
||||||
pubsub.WithFloodPublish(true),
|
pubsub.WithFloodPublish(true),
|
||||||
pubsub.WithPeerScore(
|
pubsub.WithPeerScore(
|
||||||
&pubsub.PeerScoreParams{
|
&pubsub.PeerScoreParams{
|
||||||
// TODO: we want to assign heavy positive scores to bootstrappers and also plug the
|
AppSpecificScore: func(p peer.ID) float64 {
|
||||||
// application specific score to the node itself in order to provide feedback
|
// return a heavy positive score for bootstrappers so that we don't unilaterally prune
|
||||||
// to the pubsub system based on observed behaviour
|
// them and accept PX from them.
|
||||||
AppSpecificScore: func(p peer.ID) float64 { return 0 },
|
// we don't do that in the bootstrappers themselves to avoid creating a closed mesh
|
||||||
|
// between them (however we might want to consider doing just that)
|
||||||
|
_, ok := bootstrappers[p]
|
||||||
|
if ok && isBootstrapNode {
|
||||||
|
return 2500
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: we want to plug the application specific score to the node itself in order
|
||||||
|
// to provide feedback to the pubsub system based on observed behaviour
|
||||||
|
return 0
|
||||||
|
},
|
||||||
AppSpecificWeight: 1,
|
AppSpecificWeight: 1,
|
||||||
|
|
||||||
// This sets the IP colocation threshold to 1 peer per
|
// This sets the IP colocation threshold to 1 peer per
|
||||||
@ -132,11 +148,13 @@ func GossipSub(pubsubOptions ...PubsubOpt) interface{} {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: we want to enable Peer eXchange on bootstrappers
|
// enable Peer eXchange on bootstrappers
|
||||||
// v11Options = append(v11Options, pubsub.WithPeerExchange(XXX))
|
if isBootstrapNode {
|
||||||
|
v11Options = append(v11Options, pubsub.WithPeerExchange(true))
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: we want to hook the peer score inspector so that we can gain visibility
|
// TODO: we want to hook the peer score inspector so that we can gain visibility
|
||||||
// in peer scores for debugging purposes -- this can be trigged by metrics collection
|
// in peer scores for debugging purposes -- this might be trigged by metrics collection
|
||||||
// v11Options = append(v11Options, pubsub.WithPeerScoreInspect(XXX, time.Second))
|
// v11Options = append(v11Options, pubsub.WithPeerScoreInspect(XXX, time.Second))
|
||||||
|
|
||||||
options := append(v11Options, paresOpts(host, pubsubOptions)...)
|
options := append(v11Options, paresOpts(host, pubsubOptions)...)
|
||||||
|
Loading…
Reference in New Issue
Block a user