Skip to content

Commit caba218

Browse files
initialize the resource manager
1 parent 7148ad3 commit caba218

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

core/node/groups.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
112112
}
113113

114114
// If `cfg.Swarm.DisableRelay` is set and `Network.RelayTransport` isn't, use the former.
115-
enableRelayTransport := cfg.Swarm.Transports.Network.Relay.WithDefault(!cfg.Swarm.DisableRelay) //nolint
115+
enableRelayTransport := cfg.Swarm.Transports.Network.Relay.WithDefault(!cfg.Swarm.DisableRelay) // nolint
116116

117117
// Warn about a deprecated option.
118-
//nolint
118+
// nolint
119119
if cfg.Swarm.DisableRelay {
120120
logger.Error("The 'Swarm.DisableRelay' config field is deprecated.")
121121
if enableRelayTransport {
@@ -124,7 +124,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
124124
logger.Error("Use the 'Swarm.Transports.Network.Relay' config field instead")
125125
}
126126
}
127-
//nolint
127+
// nolint
128128
if cfg.Swarm.EnableAutoRelay {
129129
logger.Error("The 'Swarm.EnableAutoRelay' config field is deprecated.")
130130
if cfg.Swarm.RelayClient.Enabled == config.Default {
@@ -133,7 +133,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
133133
logger.Error("'Swarm.EnableAutoRelay' has been overridden by 'Swarm.AutoRelay.Enabled'")
134134
}
135135
}
136-
//nolint
136+
// nolint
137137
if cfg.Swarm.EnableRelayHop {
138138
logger.Fatal("The `Swarm.EnableRelayHop` config field is ignored.\n" +
139139
"Use `Swarm.RelayService` to configure the circuit v2 relay.\n" +
@@ -144,6 +144,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option {
144144
opts := fx.Options(
145145
BaseLibP2P,
146146

147+
fx.Provide(libp2p.ResourceManager()),
147148
fx.Provide(libp2p.AddrFilters(cfg.Swarm.AddrFilters)),
148149
fx.Provide(libp2p.AddrsFactory(cfg.Addresses.Announce, cfg.Addresses.AppendAnnounce, cfg.Addresses.NoAnnounce)),
149150
fx.Provide(libp2p.SmuxTransport(cfg.Swarm.Transports)),

core/node/libp2p/rcmgr.go

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package libp2p
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"os"
7+
8+
"github.com/libp2p/go-libp2p"
9+
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
10+
)
11+
12+
func ResourceManager() func() (Libp2pOpts, error) {
13+
return func() (opts Libp2pOpts, err error) {
14+
var limiter *rcmgr.BasicLimiter
15+
16+
limitsIn, err := os.Open("./limits.json")
17+
switch {
18+
case err == nil:
19+
defer limitsIn.Close()
20+
limiter, err = rcmgr.NewDefaultLimiterFromJSON(limitsIn)
21+
if err != nil {
22+
return opts, fmt.Errorf("error parsing limit file: %w", err)
23+
}
24+
case errors.Is(err, os.ErrNotExist):
25+
limiter = rcmgr.NewDefaultLimiter()
26+
default:
27+
return opts, err
28+
}
29+
30+
libp2p.SetDefaultServiceLimits(limiter)
31+
32+
// TODO: close the resource manager when the node is shut down
33+
rcmgr, err := rcmgr.NewResourceManager(limiter)
34+
if err != nil {
35+
return opts, fmt.Errorf("error creating resource manager: %w", err)
36+
}
37+
opts.Opts = append(opts.Opts, libp2p.ResourceManager(rcmgr))
38+
return opts, nil
39+
}
40+
}

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ require (
8181
github.com/libp2p/go-libp2p-pubsub-router v0.5.0
8282
github.com/libp2p/go-libp2p-quic-transport v0.16.1
8383
github.com/libp2p/go-libp2p-record v0.1.3
84+
github.com/libp2p/go-libp2p-resource-manager v0.1.3
8485
github.com/libp2p/go-libp2p-routing-helpers v0.2.3
8586
github.com/libp2p/go-libp2p-swarm v0.10.1
8687
github.com/libp2p/go-libp2p-testing v0.7.0

0 commit comments

Comments
 (0)