core/node: add configuration options for Bitswap via fx
Fixes #9256
Leo Balduf committed
Sep 9, 2022 at 11:20 UTC
826c79c95c433dc1f79e6e2eaa95113f849b4227
2 files changed
+36
-9
core/node/bitswap.go
+34
-8
@@ -7,7 +7,7 @@ import (
7
"github.com/ipfs/go-bitswap/network"
8
blockstore "github.com/ipfs/go-ipfs-blockstore"
9
exchange "github.com/ipfs/go-ipfs-exchange-interface"
10
- config "github.com/ipfs/kubo/config"
10
+ "github.com/ipfs/kubo/config"
11
irouting "github.com/ipfs/kubo/routing"
12
"github.com/libp2p/go-libp2p/core/host"
13
"go.uber.org/fx"
@@ -15,19 +15,24 @@ import (
15
"github.com/ipfs/kubo/core/node/helpers"
16
)
17
18
+// Docs: https://github.com/ipfs/kubo/blob/master/docs/config.md#internalbitswap
19
const (
19
- // Docs: https://github.com/ipfs/kubo/blob/master/docs/config.md#internalbitswap
20
DefaultEngineBlockstoreWorkerCount = 128
21
DefaultTaskWorkerCount = 8
22
DefaultEngineTaskWorkerCount = 8
23
DefaultMaxOutstandingBytesPerPeer = 1 << 20
24
)
25
26
-// OnlineExchange creates new LibP2P backed block exchange (BitSwap)
27
-func OnlineExchange(cfg *config.Config, provide bool) interface{} {
28
- return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, rt irouting.TieredRouter, bs blockstore.GCBlockstore) exchange.Interface {
29
- bitswapNetwork := network.NewFromIpfsHost(host, rt)
26
+type bitswapOptionsOut struct {
27
+ fx.Out
28
29
+ BitswapOpts []bitswap.Option `group:"bitswap-options,flatten"`
30
+}
31
+
32
+// BitswapOptions creates configuration options for Bitswap from the config file
33
+// and whether to provide data.
34
+func BitswapOptions(cfg *config.Config, provide bool) interface{} {
35
+ return func() bitswapOptionsOut {
36
var internalBsCfg config.InternalBitswap
37
if cfg.Internal.Bitswap != nil {
38
internalBsCfg = *cfg.Internal.Bitswap
@@ -40,13 +45,34 @@ func OnlineExchange(cfg *config.Config, provide bool) interface{} {
45
bitswap.EngineTaskWorkerCount(int(internalBsCfg.EngineTaskWorkerCount.WithDefault(DefaultEngineTaskWorkerCount))),
46
bitswap.MaxOutstandingBytesPerPeer(int(internalBsCfg.MaxOutstandingBytesPerPeer.WithDefault(DefaultMaxOutstandingBytesPerPeer))),
47
}
43
- exch := bitswap.New(helpers.LifecycleCtx(mctx, lc), bitswapNetwork, bs, opts...)
48
+
49
+ return bitswapOptionsOut{BitswapOpts: opts}
50
+ }
51
+}
52
+
53
+type onlineExchangeIn struct {
54
+ fx.In
55
+
56
+ Mctx helpers.MetricsCtx
57
+ Host host.Host
58
+ Rt irouting.TieredRouter
59
+ Bs blockstore.GCBlockstore
60
+ BitswapOpts []bitswap.Option `group:"bitswap-options"`
61
+}
62
+
63
+// OnlineExchange creates new LibP2P backed block exchange (BitSwap).
64
+// Additional options to bitswap.New can be provided via the "bitswap-options"
65
+// group.
66
+func OnlineExchange() interface{} {
67
+ return func(in onlineExchangeIn, lc fx.Lifecycle) exchange.Interface {
68
+ bitswapNetwork := network.NewFromIpfsHost(in.Host, in.Rt)
69
+
70
+ exch := bitswap.New(helpers.LifecycleCtx(in.Mctx, lc), bitswapNetwork, in.Bs, in.BitswapOpts...)
71
lc.Append(fx.Hook{
72
OnStop: func(ctx context.Context) error {
73
return exch.Close()
74
},
75
})
76
return exch
50
-
77
}
78
}
core/node/groups.go
+2
-1
@@ -289,7 +289,8 @@ func Online(bcfg *BuildCfg, cfg *config.Config) fx.Option {
289
shouldBitswapProvide := !cfg.Experimental.StrategicProviding
290
291
return fx.Options(
292
- fx.Provide(OnlineExchange(cfg, shouldBitswapProvide)),
292
+ fx.Provide(BitswapOptions(cfg, shouldBitswapProvide)),
293
+ fx.Provide(OnlineExchange()),
294
maybeProvide(Graphsync, cfg.Experimental.GraphsyncEnabled),
295
fx.Provide(DNSResolver),
296
fx.Provide(Namesys(ipnsCacheSize)),