Skip to content

Commit 2ca6de1

Browse files
committed
hacky config parameter for disabling the bitswap server
1 parent ac5ddde commit 2ca6de1

File tree

3 files changed

+77
-17
lines changed

3 files changed

+77
-17
lines changed

config/internal.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ type InternalBitswap struct {
1515
MaxOutstandingBytesPerPeer OptionalInteger
1616
ProviderSearchDelay OptionalDuration
1717
WantHaveReplaceSize OptionalInteger
18+
DisableServer Flag
1819
}

core/node/bitswap.go

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package node
22

33
import (
44
"context"
5+
"github.com/ipfs/go-metrics-interface"
56
"time"
67

78
"github.com/ipfs/boxo/bitswap"
89
"github.com/ipfs/boxo/bitswap/client"
910
"github.com/ipfs/boxo/bitswap/network"
11+
"github.com/ipfs/boxo/bitswap/server"
1012
blockstore "github.com/ipfs/boxo/blockstore"
1113
exchange "github.com/ipfs/boxo/exchange"
1214
"github.com/ipfs/boxo/exchange/providing"
@@ -32,7 +34,8 @@ const (
3234
type bitswapOptionsOut struct {
3335
fx.Out
3436

35-
BitswapOpts []bitswap.Option `group:"bitswap-options,flatten"`
37+
BitswapClientOpts []client.Option `group:"bitswap-client-options,flatten"`
38+
BitswapServerOpts []server.Option `group:"bitswap-server-options,flatten"`
3639
}
3740

3841
// BitswapOptions creates configuration options for Bitswap from the config file
@@ -44,27 +47,31 @@ func BitswapOptions(cfg *config.Config) interface{} {
4447
internalBsCfg = *cfg.Internal.Bitswap
4548
}
4649

47-
opts := []bitswap.Option{
48-
bitswap.ProviderSearchDelay(internalBsCfg.ProviderSearchDelay.WithDefault(DefaultProviderSearchDelay)), // See https://github.com/ipfs/go-ipfs/issues/8807 for rationale
49-
bitswap.EngineBlockstoreWorkerCount(int(internalBsCfg.EngineBlockstoreWorkerCount.WithDefault(DefaultEngineBlockstoreWorkerCount))),
50-
bitswap.TaskWorkerCount(int(internalBsCfg.TaskWorkerCount.WithDefault(DefaultTaskWorkerCount))),
51-
bitswap.EngineTaskWorkerCount(int(internalBsCfg.EngineTaskWorkerCount.WithDefault(DefaultEngineTaskWorkerCount))),
52-
bitswap.MaxOutstandingBytesPerPeer(int(internalBsCfg.MaxOutstandingBytesPerPeer.WithDefault(DefaultMaxOutstandingBytesPerPeer))),
53-
bitswap.WithWantHaveReplaceSize(int(internalBsCfg.WantHaveReplaceSize.WithDefault(DefaultWantHaveReplaceSize))),
50+
clientOpts := []client.Option{
51+
client.ProviderSearchDelay(internalBsCfg.ProviderSearchDelay.WithDefault(DefaultProviderSearchDelay)), // See https://github.com/ipfs/go-ipfs/issues/8807 for rationale
5452
}
5553

56-
return bitswapOptionsOut{BitswapOpts: opts}
54+
serverOpts := []server.Option{
55+
server.EngineBlockstoreWorkerCount(int(internalBsCfg.EngineBlockstoreWorkerCount.WithDefault(DefaultEngineBlockstoreWorkerCount))),
56+
server.TaskWorkerCount(int(internalBsCfg.TaskWorkerCount.WithDefault(DefaultTaskWorkerCount))),
57+
server.EngineTaskWorkerCount(int(internalBsCfg.EngineTaskWorkerCount.WithDefault(DefaultEngineTaskWorkerCount))),
58+
server.MaxOutstandingBytesPerPeer(int(internalBsCfg.MaxOutstandingBytesPerPeer.WithDefault(DefaultMaxOutstandingBytesPerPeer))),
59+
server.WithWantHaveReplaceSize(int(internalBsCfg.WantHaveReplaceSize.WithDefault(DefaultWantHaveReplaceSize))),
60+
}
61+
62+
return bitswapOptionsOut{BitswapClientOpts: clientOpts, BitswapServerOpts: serverOpts}
5763
}
5864
}
5965

6066
type bitswapIn struct {
6167
fx.In
6268

63-
Mctx helpers.MetricsCtx
64-
Host host.Host
65-
Rt irouting.ProvideManyRouter
66-
Bs blockstore.GCBlockstore
67-
BitswapOpts []bitswap.Option `group:"bitswap-options"`
69+
Mctx helpers.MetricsCtx
70+
Host host.Host
71+
Rt irouting.ProvideManyRouter
72+
Bs blockstore.GCBlockstore
73+
BitswapClientOpts []client.Option `group:"bitswap-client-options"`
74+
BitswapServerOpts []server.Option `group:"bitswap-server-options"`
6875
}
6976

7077
// Bitswap creates the BitSwap server/client instance.
@@ -78,7 +85,15 @@ func Bitswap(provide bool) interface{} {
7885
if provide {
7986
provider = in.Rt
8087
}
81-
bs := bitswap.New(helpers.LifecycleCtx(in.Mctx, lc), bitswapNetwork, provider, in.Bs, in.BitswapOpts...)
88+
89+
var bsOpts []bitswap.Option
90+
for _, opt := range in.BitswapClientOpts {
91+
bsOpts = append(bsOpts, bitswap.WithClientOption(opt))
92+
}
93+
for _, opt := range in.BitswapServerOpts {
94+
bsOpts = append(bsOpts, bitswap.WithServerOption(opt))
95+
}
96+
bs := bitswap.New(helpers.LifecycleCtx(in.Mctx, lc), bitswapNetwork, provider, in.Bs, bsOpts...)
8297

8398
lc.Append(fx.Hook{
8499
OnStop: func(ctx context.Context) error {
@@ -101,6 +116,46 @@ func OnlineExchange() interface{} {
101116
}
102117
}
103118

119+
// Bitswap creates the BitSwap server/client instance.
120+
// Additional options to bitswap.New can be provided via the "bitswap-options"
121+
// group.
122+
func BitswapClientOnly(provide bool) interface{} {
123+
return func(in bitswapIn, lc fx.Lifecycle) *client.Client {
124+
bitswapNetwork := network.NewFromIpfsHost(in.Host)
125+
126+
var provider client.ProviderFinder
127+
if provide {
128+
provider = in.Rt
129+
}
130+
131+
ctx := helpers.LifecycleCtx(in.Mctx, lc)
132+
ctx = metrics.CtxSubScope(ctx, "bitswap")
133+
bs := client.New(ctx, bitswapNetwork, provider, in.Bs, in.BitswapClientOpts...)
134+
bitswapNetwork.Start(bs) // use the polyfill receiver to log received errors and trace messages only once
135+
136+
lc.Append(fx.Hook{
137+
OnStop: func(ctx context.Context) error {
138+
bitswapNetwork.Stop()
139+
return bs.Close()
140+
},
141+
})
142+
143+
return bs
144+
}
145+
}
146+
147+
// OnlineExchange creates new LibP2P backed block exchange.
148+
func OnlineExchangeClientOnly() interface{} {
149+
return func(in *client.Client, lc fx.Lifecycle) exchange.Interface {
150+
lc.Append(fx.Hook{
151+
OnStop: func(ctx context.Context) error {
152+
return in.Close()
153+
},
154+
})
155+
return in
156+
}
157+
}
158+
104159
type providingExchangeIn struct {
105160
fx.In
106161

core/node/groups.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,14 @@ func Online(bcfg *BuildCfg, cfg *config.Config, userResourceOverrides rcmgr.Part
292292
/* don't provide from bitswap when the strategic provider service is active */
293293
shouldBitswapProvide := !cfg.Experimental.StrategicProviding
294294

295+
enableBitswapServer := !cfg.Internal.Bitswap.DisableServer.WithDefault(false)
296+
295297
return fx.Options(
296298
fx.Provide(BitswapOptions(cfg)),
297-
fx.Provide(Bitswap(shouldBitswapProvide)),
298-
fx.Provide(OnlineExchange()),
299+
maybeProvide(Bitswap(shouldBitswapProvide), enableBitswapServer),
300+
maybeProvide(OnlineExchange(), enableBitswapServer),
301+
maybeProvide(BitswapClientOnly(shouldBitswapProvide), !enableBitswapServer),
302+
maybeProvide(OnlineExchangeClientOnly(), !enableBitswapServer),
299303
// Replace our Exchange with a Providing exchange!
300304
fx.Decorate(ProvidingExchange(shouldBitswapProvide)),
301305
fx.Provide(DNSResolver),

0 commit comments

Comments
 (0)