From c8d879bfc13313d5e8419d05ae690d905f61e728 Mon Sep 17 00:00:00 2001 From: Wondertan Date: Sat, 20 Apr 2024 22:10:21 +0200 Subject: [PATCH] fix dependency cycle --- nodebuilder/header/constructors.go | 16 +++++++++++----- nodebuilder/header/module.go | 4 +++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/nodebuilder/header/constructors.go b/nodebuilder/header/constructors.go index a78d609d8e..23947a8338 100644 --- a/nodebuilder/header/constructors.go +++ b/nodebuilder/header/constructors.go @@ -69,11 +69,10 @@ func newP2PExchange[H libhead.Header[H]]( // newSyncer constructs new Syncer for headers. func newSyncer[H libhead.Header[H]]( ex libhead.Exchange[H], - fservice libfraud.Service[H], store libhead.Store[H], sub libhead.Subscriber[H], cfg Config, -) (*sync.Syncer[H], *modfraud.ServiceBreaker[*sync.Syncer[H], H], error) { +) (*sync.Syncer[H], error) { opts := []sync.Option{sync.WithParams(cfg.Syncer), sync.WithBlockTime(modp2p.BlockTime)} if MetricsEnabled { opts = append(opts, sync.WithMetrics()) @@ -81,14 +80,21 @@ func newSyncer[H libhead.Header[H]]( syncer, err := sync.NewSyncer[H](ex, store, sub, opts...) if err != nil { - return nil, nil, err + return nil, err } - return syncer, &modfraud.ServiceBreaker[*sync.Syncer[H], H]{ + return syncer, nil +} + +func newFraudedSyncer[H libhead.Header[H]]( + fservice libfraud.Service[H], + syncer *sync.Syncer[H], +) *modfraud.ServiceBreaker[*sync.Syncer[H], H] { + return &modfraud.ServiceBreaker[*sync.Syncer[H], H]{ Service: syncer, FraudType: byzantine.BadEncoding, FraudServ: fservice, - }, nil + } } // newInitStore constructs an initialized store diff --git a/nodebuilder/header/module.go b/nodebuilder/header/module.go index 4be25f7125..c32d61c6b3 100644 --- a/nodebuilder/header/module.go +++ b/nodebuilder/header/module.go @@ -34,8 +34,9 @@ func ConstructModule[H libhead.Header[H]](tp node.Type, cfg *Config) fx.Option { fx.Provide(func(subscriber *p2p.Subscriber[H]) libhead.Subscriber[H] { return subscriber }), + fx.Provide(newSyncer[H]), fx.Provide(fx.Annotate( - newSyncer[H], + newFraudedSyncer[H], fx.OnStart(func( ctx context.Context, breaker *modfraud.ServiceBreaker[*sync.Syncer[H], H], @@ -49,6 +50,7 @@ func ConstructModule[H libhead.Header[H]](tp node.Type, cfg *Config) fx.Option { return breaker.Stop(ctx) }), )), + fx.Invoke(func(*modfraud.ServiceBreaker[*sync.Syncer[H], H]) {}), // ensure ServiceBreaker is constructed fx.Provide(fx.Annotate( func(ps *pubsub.PubSub, network modp2p.Network) (*p2p.Subscriber[H], error) { opts := []p2p.SubscriberOption{p2p.WithSubscriberNetworkID(network.String())}