Skip to content

Commit 581a015

Browse files
swarm: emit PeerConnectedness event from swarm instead of from hosts (#1574)
* pass an event bus to the swarm constructor * make the eventbus parameter a required swarm constructor parameter * emit Connectedness notifications from the swarm * remove peer connectedness watchers from hosts * swarm: emit connectedness events when holding the mutex
1 parent c1cfe6c commit 581a015

File tree

14 files changed

+129
-270
lines changed

14 files changed

+129
-270
lines changed

config/config.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/libp2p/go-libp2p/core/connmgr"
1010
"github.com/libp2p/go-libp2p/core/crypto"
11+
"github.com/libp2p/go-libp2p/core/event"
1112
"github.com/libp2p/go-libp2p/core/host"
1213
"github.com/libp2p/go-libp2p/core/metrics"
1314
"github.com/libp2p/go-libp2p/core/network"
@@ -23,6 +24,7 @@ import (
2324
"github.com/libp2p/go-libp2p/p2p/host/autorelay"
2425
bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
2526
blankhost "github.com/libp2p/go-libp2p/p2p/host/blank"
27+
"github.com/libp2p/go-libp2p/p2p/host/eventbus"
2628
"github.com/libp2p/go-libp2p/p2p/host/peerstore/pstoremem"
2729
routed "github.com/libp2p/go-libp2p/p2p/host/routed"
2830
"github.com/libp2p/go-libp2p/p2p/net/swarm"
@@ -123,7 +125,7 @@ type Config struct {
123125
PrometheusRegisterer prometheus.Registerer
124126
}
125127

126-
func (cfg *Config) makeSwarm(enableMetrics bool) (*swarm.Swarm, error) {
128+
func (cfg *Config) makeSwarm(eventBus event.Bus, enableMetrics bool) (*swarm.Swarm, error) {
127129
if cfg.Peerstore == nil {
128130
return nil, fmt.Errorf("no peerstore specified")
129131
}
@@ -176,7 +178,7 @@ func (cfg *Config) makeSwarm(enableMetrics bool) (*swarm.Swarm, error) {
176178
swarm.WithMetricsTracer(swarm.NewMetricsTracer(swarm.WithRegisterer(cfg.PrometheusRegisterer))))
177179
}
178180
// TODO: Make the swarm implementation configurable.
179-
return swarm.NewSwarm(pid, cfg.Peerstore, opts...)
181+
return swarm.NewSwarm(pid, cfg.Peerstore, eventBus, opts...)
180182
}
181183

182184
func (cfg *Config) addTransports(h host.Host) error {
@@ -284,12 +286,14 @@ func (cfg *Config) addTransports(h host.Host) error {
284286
//
285287
// This function consumes the config. Do not reuse it (really!).
286288
func (cfg *Config) NewNode() (host.Host, error) {
287-
swrm, err := cfg.makeSwarm(!cfg.DisableMetrics)
289+
eventBus := eventbus.NewBus(eventbus.WithMetricsTracer(eventbus.NewMetricsTracer(eventbus.WithRegisterer(cfg.PrometheusRegisterer))))
290+
swrm, err := cfg.makeSwarm(eventBus, !cfg.DisableMetrics)
288291
if err != nil {
289292
return nil, err
290293
}
291294

292295
h, err := bhost.NewHost(swrm, &bhost.HostOpts{
296+
EventBus: eventBus,
293297
ConnManager: cfg.ConnManager,
294298
AddrsFactory: cfg.AddrsFactory,
295299
NATManager: cfg.NATManager,
@@ -397,7 +401,7 @@ func (cfg *Config) NewNode() (host.Host, error) {
397401
Peerstore: ps,
398402
}
399403

400-
dialer, err := autoNatCfg.makeSwarm(false)
404+
dialer, err := autoNatCfg.makeSwarm(eventbus.NewBus(), false)
401405
if err != nil {
402406
h.Close()
403407
return nil, err

p2p/host/basic/basic_host.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
"github.com/libp2p/go-netroute"
3333

3434
logging "github.com/ipfs/go-log/v2"
35-
3635
ma "github.com/multiformats/go-multiaddr"
3736
madns "github.com/multiformats/go-multiaddr-dns"
3837
manet "github.com/multiformats/go-multiaddr/net"
@@ -108,6 +107,9 @@ var _ host.Host = (*BasicHost)(nil)
108107
// HostOpts holds options that can be passed to NewHost in order to
109108
// customize construction of the *BasicHost.
110109
type HostOpts struct {
110+
// EventBus sets the event bus. Will construct a new event bus if omitted.
111+
EventBus event.Bus
112+
111113
// MultistreamMuxer is essential for the *BasicHost and will use a sensible default value if omitted.
112114
MultistreamMuxer *msmux.MultistreamMuxer[protocol.ID]
113115

@@ -164,16 +166,11 @@ func NewHost(n network.Network, opts *HostOpts) (*BasicHost, error) {
164166
if opts == nil {
165167
opts = &HostOpts{}
166168
}
167-
168-
var eventBus event.Bus
169-
if opts.EnableMetrics {
170-
eventBus = eventbus.NewBus(
171-
eventbus.WithMetricsTracer(eventbus.NewMetricsTracer(eventbus.WithRegisterer(opts.PrometheusRegisterer))))
172-
} else {
173-
eventBus = eventbus.NewBus()
169+
if opts.EventBus == nil {
170+
opts.EventBus = eventbus.NewBus()
174171
}
175172

176-
psManager, err := pstoremanager.NewPeerstoreManager(n.Peerstore(), eventBus)
173+
psManager, err := pstoremanager.NewPeerstoreManager(n.Peerstore(), opts.EventBus)
177174
if err != nil {
178175
return nil, err
179176
}
@@ -186,7 +183,7 @@ func NewHost(n network.Network, opts *HostOpts) (*BasicHost, error) {
186183
negtimeout: DefaultNegotiationTimeout,
187184
AddrsFactory: DefaultAddrsFactory,
188185
maResolver: madns.DefaultResolver,
189-
eventbus: eventBus,
186+
eventbus: opts.EventBus,
190187
addrChangeChan: make(chan struct{}, 1),
191188
ctx: hostCtx,
192189
ctxCancel: cancel,
@@ -201,11 +198,6 @@ func NewHost(n network.Network, opts *HostOpts) (*BasicHost, error) {
201198
if h.emitters.evtLocalAddrsUpdated, err = h.eventbus.Emitter(&event.EvtLocalAddressesUpdated{}, eventbus.Stateful); err != nil {
202199
return nil, err
203200
}
204-
evtPeerConnectednessChanged, err := h.eventbus.Emitter(&event.EvtPeerConnectednessChanged{})
205-
if err != nil {
206-
return nil, err
207-
}
208-
h.Network().Notify(newPeerConnectWatcher(evtPeerConnectednessChanged))
209201

210202
if !h.disableSignedPeerRecord {
211203
cab, ok := peerstore.GetCertifiedAddrBook(n.Peerstore())

p2p/host/basic/peer_connectedness.go

Lines changed: 0 additions & 71 deletions
This file was deleted.

p2p/host/basic/peer_connectedness_test.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

p2p/host/blank/blank.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,6 @@ func NewBlankHost(n network.Network, options ...Option) *BlankHost {
7878
if bh.emitters.evtLocalProtocolsUpdated, err = bh.eventbus.Emitter(&event.EvtLocalProtocolsUpdated{}); err != nil {
7979
return nil
8080
}
81-
evtPeerConnectednessChanged, err := bh.eventbus.Emitter(&event.EvtPeerConnectednessChanged{})
82-
if err != nil {
83-
return nil
84-
}
85-
n.Notify(newPeerConnectWatcher(evtPeerConnectednessChanged))
8681

8782
n.SetStreamHandler(bh.newStreamHandler)
8883

p2p/host/blank/peer_connectedness.go

Lines changed: 0 additions & 71 deletions
This file was deleted.

p2p/host/blank/peer_connectedness_test.go

Lines changed: 0 additions & 46 deletions
This file was deleted.

p2p/net/swarm/dial_worker_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/libp2p/go-libp2p/core/sec"
1616
"github.com/libp2p/go-libp2p/core/sec/insecure"
1717
"github.com/libp2p/go-libp2p/core/transport"
18+
"github.com/libp2p/go-libp2p/p2p/host/eventbus"
1819
"github.com/libp2p/go-libp2p/p2p/host/peerstore/pstoremem"
1920
"github.com/libp2p/go-libp2p/p2p/muxer/yamux"
2021
tptu "github.com/libp2p/go-libp2p/p2p/net/upgrader"
@@ -43,7 +44,7 @@ func makeSwarm(t *testing.T) *Swarm {
4344
ps.AddPrivKey(id, priv)
4445
t.Cleanup(func() { ps.Close() })
4546

46-
s, err := NewSwarm(id, ps, WithDialTimeout(time.Second))
47+
s, err := NewSwarm(id, ps, eventbus.NewBus(), WithDialTimeout(time.Second))
4748
require.NoError(t, err)
4849

4950
upgrader := makeUpgrader(t, s)

0 commit comments

Comments
 (0)