Add peer score tracing on pubsub peer score inspect

This commit is contained in:
Matija Petrunic 2021-08-30 14:49:10 +02:00
parent 99fbd7039e
commit b1dafd81b8

View File

@ -49,6 +49,30 @@ func ScoreKeeper() *dtypes.ScoreKeeper {
return new(dtypes.ScoreKeeper) return new(dtypes.ScoreKeeper)
} }
type PeerScoreTracker interface {
UpdatePeerScore(scores map[peer.ID]*pubsub.PeerScoreSnapshot)
}
type peerScoreTracker struct {
sk *dtypes.ScoreKeeper
lt LotusTracer
}
func newPeerScoreTracker(lt LotusTracer, sk *dtypes.ScoreKeeper) PeerScoreTracker {
return &peerScoreTracker{
sk: sk,
lt: lt,
}
}
func (pst *peerScoreTracker) UpdatePeerScore(scores map[peer.ID]*pubsub.PeerScoreSnapshot) {
if pst.lt != nil {
pst.lt.TracePeerScore(scores)
}
pst.sk.Update(scores)
}
type GossipIn struct { type GossipIn struct {
fx.In fx.In
Mctx helpers.MetricsCtx Mctx helpers.MetricsCtx
@ -272,7 +296,6 @@ func GossipSub(in GossipIn) (service *pubsub.PubSub, err error) {
OpportunisticGraftThreshold: OpportunisticGraftScoreThreshold, OpportunisticGraftThreshold: OpportunisticGraftScoreThreshold,
}, },
), ),
pubsub.WithPeerScoreInspect(in.Sk.Update, 10*time.Second),
} }
// enable Peer eXchange on bootstrappers // enable Peer eXchange on bootstrappers
@ -359,12 +382,18 @@ func GossipSub(in GossipIn) (service *pubsub.PubSub, err error) {
} }
lt := newLotusTracer(tr) lt := newLotusTracer(tr)
pst := newPeerScoreTracker(lt, in.Sk)
trw := newTracerWrapper(tr, lt, build.BlocksTopic(in.Nn)) trw := newTracerWrapper(tr, lt, build.BlocksTopic(in.Nn))
options = append(options, pubsub.WithEventTracer(trw)) options = append(options, pubsub.WithEventTracer(trw))
options = append(options, pubsub.WithPeerScoreInspect(pst.UpdatePeerScore, 10*time.Second))
} else { } else {
// still instantiate a tracer for collecting metrics // still instantiate a tracer for collecting metrics
trw := newTracerWrapper(nil, nil) trw := newTracerWrapper(nil, nil)
options = append(options, pubsub.WithEventTracer(trw)) options = append(options, pubsub.WithEventTracer(trw))
pst := newPeerScoreTracker(nil, in.Sk)
options = append(options, pubsub.WithPeerScoreInspect(pst.UpdatePeerScore, 10*time.Second))
} }
return pubsub.NewGossipSub(helpers.LifecycleCtx(in.Mctx, in.Lc), in.Host, options...) return pubsub.NewGossipSub(helpers.LifecycleCtx(in.Mctx, in.Lc), in.Host, options...)