@cryptotaxi247 / kubo / commits / 826c79c95

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)),