Skip to content

Commit 7acb441

Browse files
committed
address review comments
1 parent 6f853be commit 7acb441

File tree

7 files changed

+141
-148
lines changed

7 files changed

+141
-148
lines changed

config/config.go

+24-3
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,6 @@ func (cfg *Config) newBasicHost(swrm *swarm.Swarm, eventBus event.Bus) (*bhost.B
439439
DisableIdentifyAddressDiscovery: cfg.DisableIdentifyAddressDiscovery,
440440
EnableAutoNATv2: cfg.EnableAutoNATv2,
441441
AutoNATv2Dialer: autonatv2Dialer,
442-
EnableAutoRelay: cfg.EnableAutoRelay,
443-
AutoRelayOpts: cfg.AutoRelayOpts,
444442
})
445443
if err != nil {
446444
return nil, err
@@ -534,7 +532,7 @@ func (cfg *Config) NewNode() (host.Host, error) {
534532
}
535533
fxopts = append(fxopts, transportOpts...)
536534

537-
// Configure routing and autorelay
535+
// Configure routing
538536
if cfg.Routing != nil {
539537
fxopts = append(fxopts,
540538
fx.Provide(cfg.Routing),
@@ -544,6 +542,28 @@ func (cfg *Config) NewNode() (host.Host, error) {
544542
)
545543
}
546544

545+
// enable autorelay
546+
fxopts = append(fxopts,
547+
fx.Invoke(func(h *bhost.BasicHost, lifecycle fx.Lifecycle) error {
548+
if cfg.EnableAutoRelay {
549+
if !cfg.DisableMetrics {
550+
mt := autorelay.WithMetricsTracer(
551+
autorelay.NewMetricsTracer(autorelay.WithRegisterer(cfg.PrometheusRegisterer)))
552+
mtOpts := []autorelay.Option{mt}
553+
cfg.AutoRelayOpts = append(mtOpts, cfg.AutoRelayOpts...)
554+
}
555+
556+
ar, err := autorelay.NewAutoRelay(h, cfg.AutoRelayOpts...)
557+
if err != nil {
558+
return err
559+
}
560+
lifecycle.Append(fx.StartStopHook(ar.Start, ar.Close))
561+
return nil
562+
}
563+
return nil
564+
}),
565+
)
566+
547567
var bh *bhost.BasicHost
548568
fxopts = append(fxopts, fx.Invoke(func(bho *bhost.BasicHost) { bh = bho }))
549569
fxopts = append(fxopts, fx.Invoke(func(h *bhost.BasicHost, lifecycle fx.Lifecycle) {
@@ -561,6 +581,7 @@ func (cfg *Config) NewNode() (host.Host, error) {
561581
if app.Err() != nil {
562582
return nil, fmt.Errorf("failed to create host: %w", app.Err())
563583
}
584+
564585
if err := cfg.addAutoNAT(bh); err != nil {
565586
if cfg.Routing != nil {
566587
rh.Close()

core/event/addrs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,6 @@ type EvtLocalAddressesUpdated struct {
8383
}
8484

8585
// EvtAutoRelayAddrsUpdated is sent by the autorelay when the node's relay addresses are updated
86-
type EvtAutoRelayAddrs struct {
86+
type EvtAutoRelayAddrsUpdated struct {
8787
RelayAddrs []ma.Multiaddr
8888
}

libp2p_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,6 @@ func TestDialCircuitAddrWithWrappedResourceManager(t *testing.T) {
466466
),
467467
peerstore.TempAddrTTL,
468468
)
469-
require.NoError(t, err)
470469

471470
require.Eventually(t, func() bool {
472471
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)

p2p/host/autorelay/autorelay.go

-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/libp2p/go-libp2p/core/host"
1111
"github.com/libp2p/go-libp2p/core/network"
1212
"github.com/libp2p/go-libp2p/p2p/host/eventbus"
13-
ma "github.com/multiformats/go-multiaddr"
1413

1514
logging "github.com/ipfs/go-log/v2"
1615
)
@@ -54,10 +53,6 @@ func NewAutoRelay(host host.Host, opts ...Option) (*AutoRelay, error) {
5453
return r, nil
5554
}
5655

57-
func (r *AutoRelay) RelayAddrs() []ma.Multiaddr {
58-
return r.relayFinder.RelayAddrs()
59-
}
60-
6156
func (r *AutoRelay) Start() {
6257
r.refCount.Add(1)
6358
go func() {
@@ -82,7 +77,6 @@ func (r *AutoRelay) background() {
8277
if !ok {
8378
return
8479
}
85-
// TODO: push changed addresses
8680
evt := ev.(event.EvtLocalReachabilityChanged)
8781
switch evt.Reachability {
8882
case network.ReachabilityPrivate, network.ReachabilityUnknown:

p2p/host/autorelay/autorelay_test.go

+35-19
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
circuitv2_proto "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/proto"
2020

2121
ma "github.com/multiformats/go-multiaddr"
22+
"github.com/stretchr/testify/assert"
2223
"github.com/stretchr/testify/require"
2324
)
2425

@@ -524,13 +525,14 @@ func TestNoBusyLoop0MinInterval(t *testing.T) {
524525
}
525526
func TestAutoRelayAddrsEvent(t *testing.T) {
526527
cl := newMockClock()
527-
r1, r2 := newRelay(t), newRelay(t)
528+
relays := []host.Host{newRelay(t), newRelay(t), newRelay(t), newRelay(t), newRelay(t)}
528529
t.Cleanup(func() {
529-
r1.Close()
530-
r2.Close()
530+
for _, r := range relays {
531+
r.Close()
532+
}
531533
})
532534

533-
relayFromP2PAddr := func(a ma.Multiaddr) peer.ID {
535+
relayIDFromP2PAddr := func(a ma.Multiaddr) peer.ID {
534536
r, c := ma.SplitLast(a)
535537
if c.Protocol().Code != ma.P_CIRCUIT {
536538
return ""
@@ -541,47 +543,61 @@ func TestAutoRelayAddrsEvent(t *testing.T) {
541543
return ""
542544
}
543545

544-
checkPeersExist := func(addrs []ma.Multiaddr, peers ...peer.ID) bool {
546+
checkAddrsContainsPeersAsRelay := func(addrs []ma.Multiaddr, peers ...peer.ID) bool {
545547
for _, p := range peers {
546-
if !slices.ContainsFunc(addrs, func(a ma.Multiaddr) bool { return relayFromP2PAddr(a) == p }) {
548+
if !slices.ContainsFunc(addrs, func(a ma.Multiaddr) bool { return relayIDFromP2PAddr(a) == p }) {
547549
return false
548550
}
549551
}
550552
return true
551553
}
552-
peerChan := make(chan peer.AddrInfo, 3)
554+
peerChan := make(chan peer.AddrInfo, 5)
553555
h := newPrivateNode(t,
554556
func(context.Context, int) <-chan peer.AddrInfo {
555557
return peerChan
556558
},
557559
autorelay.WithClock(cl),
558560
autorelay.WithMinCandidates(1),
559561
autorelay.WithMaxCandidates(10),
560-
autorelay.WithNumRelays(3),
562+
autorelay.WithNumRelays(5),
561563
autorelay.WithBootDelay(1*time.Second),
562564
autorelay.WithMinInterval(time.Hour),
563565
)
564566
defer h.Close()
565567

566-
sub, err := h.EventBus().Subscribe(new(event.EvtAutoRelayAddrs))
568+
sub, err := h.EventBus().Subscribe(new(event.EvtAutoRelayAddrsUpdated))
567569
require.NoError(t, err)
568570

569-
peerChan <- peer.AddrInfo{ID: r1.ID(), Addrs: r1.Addrs()}
571+
peerChan <- peer.AddrInfo{ID: relays[0].ID(), Addrs: relays[0].Addrs()}
570572
cl.AdvanceBy(time.Second)
571573

572-
require.Eventually(t, func() bool {
574+
require.EventuallyWithT(t, func(collect *assert.CollectT) {
573575
e := <-sub.Out()
574-
if !checkPeersExist(e.(event.EvtAutoRelayAddrs).RelayAddrs, r1.ID()) {
575-
return false
576+
evt := e.(event.EvtAutoRelayAddrsUpdated)
577+
if !checkAddrsContainsPeersAsRelay(evt.RelayAddrs, relays[0].ID()) {
578+
collect.Errorf("expected %s to be in %v", relays[0].ID(), evt.RelayAddrs)
576579
}
577-
if checkPeersExist(e.(event.EvtAutoRelayAddrs).RelayAddrs, r2.ID()) {
578-
return false
580+
if checkAddrsContainsPeersAsRelay(evt.RelayAddrs, relays[1].ID()) {
581+
collect.Errorf("expected %s to not be in %v", relays[1].ID(), evt.RelayAddrs)
579582
}
580-
return true
581583
}, 5*time.Second, 50*time.Millisecond)
582-
peerChan <- peer.AddrInfo{ID: r2.ID(), Addrs: r2.Addrs()}
583-
require.Eventually(t, func() bool {
584+
for _, r := range relays[1:] {
585+
peerChan <- peer.AddrInfo{ID: r.ID(), Addrs: r.Addrs()}
586+
}
587+
require.EventuallyWithT(t, func(c *assert.CollectT) {
584588
e := <-sub.Out()
585-
return checkPeersExist(e.(event.EvtAutoRelayAddrs).RelayAddrs, r1.ID(), r2.ID())
589+
evt := e.(event.EvtAutoRelayAddrsUpdated)
590+
relayIds := []peer.ID{}
591+
for _, r := range relays[1:] {
592+
relayIds = append(relayIds, r.ID())
593+
}
594+
if !checkAddrsContainsPeersAsRelay(evt.RelayAddrs, relayIds...) {
595+
c.Errorf("expected %s to be in %v", relayIds, evt.RelayAddrs)
596+
}
586597
}, 5*time.Second, 50*time.Millisecond)
598+
select {
599+
case e := <-sub.Out():
600+
t.Fatal("expected no more events after all reservations obtained; got: ", e.(event.EvtAutoRelayAddrsUpdated))
601+
case <-time.After(1 * time.Second):
602+
}
587603
}

0 commit comments

Comments
 (0)