github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/p2p/resources.go (about) 1 package p2p 2 3 import ( 4 "context" 5 6 "github.com/libp2p/go-libp2p" 7 "github.com/libp2p/go-libp2p/core/network" 8 rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager" 9 ma "github.com/multiformats/go-multiaddr" 10 madns "github.com/multiformats/go-multiaddr-dns" 11 "go.uber.org/fx" 12 ) 13 14 func resourceManager(params resourceManagerParams) (network.ResourceManager, error) { 15 return rcmgr.NewResourceManager(rcmgr.NewFixedLimiter(params.Limits)) 16 } 17 18 func infiniteResources() rcmgr.ConcreteLimitConfig { 19 return rcmgr.InfiniteLimits 20 } 21 22 func autoscaleResources() rcmgr.ConcreteLimitConfig { 23 limits := rcmgr.DefaultLimits 24 libp2p.SetDefaultServiceLimits(&limits) 25 return limits.AutoScale() 26 } 27 28 func allowList(ctx context.Context, cfg Config, bootstrappers Bootstrappers) (rcmgr.Option, error) { 29 mutual, err := cfg.mutualPeers() 30 if err != nil { 31 return nil, err 32 } 33 34 // TODO(@Wondertan): We should resolve their addresses only once, but currently 35 // we resolve it here and libp2p stuck does that as well internally 36 allowlist := make([]ma.Multiaddr, 0, len(bootstrappers)+len(mutual)) 37 for _, b := range bootstrappers { 38 for _, baddr := range b.Addrs { 39 resolved, err := madns.DefaultResolver.Resolve(ctx, baddr) 40 if err != nil { 41 log.Warnw("error resolving bootstrapper DNS", "addr", baddr.String(), "err", err) 42 continue 43 } 44 allowlist = append(allowlist, resolved...) 45 } 46 } 47 for _, m := range mutual { 48 for _, maddr := range m.Addrs { 49 resolved, err := madns.DefaultResolver.Resolve(ctx, maddr) 50 if err != nil { 51 log.Warnw("error resolving mutual peer DNS", "addr", maddr.String(), "err", err) 52 continue 53 } 54 allowlist = append(allowlist, resolved...) 55 } 56 } 57 58 return rcmgr.WithAllowlistedMultiaddrs(allowlist), nil 59 } 60 61 func traceReporter() rcmgr.Option { 62 str, err := rcmgr.NewStatsTraceReporter() 63 if err != nil { 64 panic(err) // err is always nil as per sources 65 } 66 67 return rcmgr.WithTraceReporter(str) 68 } 69 70 type resourceManagerParams struct { 71 fx.In 72 73 Limits rcmgr.ConcreteLimitConfig 74 Opts []rcmgr.Option `group:"rcmgr-opts"` 75 } 76 77 func resourceManagerOpt(opt any) fx.Annotated { 78 return fx.Annotated{ 79 Group: "rcmgr-opts", 80 Target: opt, 81 } 82 }