Skip to content

Commit 549e0f4

Browse files
committed
Revert "feat(pkg/p2p): reconnect on disconnected peers (#3212)"
This reverts commit 04c9cad.
1 parent 2865d6d commit 549e0f4

2 files changed

Lines changed: 0 additions & 188 deletions

File tree

pkg/p2p/client.go

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,6 @@ const (
3535

3636
// peerLimit defines limit of number of peers returned during active peer discovery.
3737
peerLimit = 60
38-
39-
// seedReconnectBackoff is the initial backoff when reconnecting to a disconnected seed peer.
40-
seedReconnectBackoff = 1 * time.Second
41-
42-
// seedReconnectMaxBackoff is the maximum backoff for seed peer reconnection attempts.
43-
seedReconnectMaxBackoff = 30 * time.Second
4438
)
4539

4640
// Client is a P2P client, implemented with libp2p.
@@ -62,11 +56,6 @@ type Client struct {
6256
ps *pubsub.PubSub
6357
started bool
6458

65-
ctx context.Context
66-
cancel context.CancelFunc
67-
68-
seedPeers []peer.AddrInfo
69-
7059
metrics *Metrics
7160
}
7261

@@ -151,7 +140,6 @@ func (c *Client) Start(ctx context.Context) error {
151140

152141
func (c *Client) startWithHost(ctx context.Context, h host.Host) error {
153142
c.host = h
154-
c.ctx, c.cancel = context.WithCancel(ctx)
155143
for _, a := range c.host.Addrs() {
156144
c.logger.Info().Str("address", fmt.Sprintf("%s/p2p/%s", a, c.host.ID())).Msg("listening on address")
157145
}
@@ -182,17 +170,11 @@ func (c *Client) startWithHost(ctx context.Context, h host.Host) error {
182170
}
183171

184172
c.started = true
185-
186-
c.host.Network().Notify(c.newDisconnectNotifee())
187-
188173
return nil
189174
}
190175

191176
// Close gently stops Client.
192177
func (c *Client) Close() error {
193-
if c.cancel != nil {
194-
c.cancel()
195-
}
196178
var err error
197179
if c.dht != nil {
198180
err = errors.Join(err, c.dht.Close())
@@ -263,77 +245,6 @@ func (c *Client) Peers() []PeerConnection {
263245
return res
264246
}
265247

266-
type disconnectNotifee struct {
267-
c *Client
268-
}
269-
270-
func (n disconnectNotifee) Connected(_ network.Network, conn network.Conn) {
271-
p := conn.RemotePeer()
272-
for _, sp := range n.c.seedPeers {
273-
if sp.ID == p {
274-
n.c.logger.Info().Str("peer", p.String()).Msg("connected to seed peer")
275-
return
276-
}
277-
}
278-
}
279-
func (n disconnectNotifee) OpenedStream(_ network.Network, _ network.Stream) {}
280-
func (n disconnectNotifee) ClosedStream(_ network.Network, _ network.Stream) {}
281-
func (n disconnectNotifee) Listen(_ network.Network, _ multiaddr.Multiaddr) {}
282-
func (n disconnectNotifee) ListenClose(_ network.Network, _ multiaddr.Multiaddr) {}
283-
284-
func (n disconnectNotifee) Disconnected(_ network.Network, conn network.Conn) {
285-
p := conn.RemotePeer()
286-
for _, sp := range n.c.seedPeers {
287-
if sp.ID == p {
288-
n.c.logger.Warn().Str("peer", p.String()).Msg("disconnected from seed peer, scheduling reconnect")
289-
go n.c.reconnectSeedPeer(sp)
290-
return
291-
}
292-
}
293-
}
294-
295-
func (c *Client) reconnectSeedPeer(sp peer.AddrInfo) {
296-
backoff := seedReconnectBackoff
297-
for {
298-
if c.ctx.Err() != nil {
299-
return
300-
}
301-
if c.isConnected(sp.ID) {
302-
return
303-
}
304-
305-
err := c.host.Connect(c.ctx, sp)
306-
if err == nil {
307-
c.logger.Info().Str("peer", sp.ID.String()).Msg("reconnected to seed peer")
308-
return
309-
}
310-
if c.ctx.Err() != nil {
311-
return
312-
}
313-
314-
c.logger.Debug().Str("peer", sp.ID.String()).Dur("backoff", backoff).Err(err).Msg("failed to reconnect to seed peer, retrying")
315-
select {
316-
case <-c.ctx.Done():
317-
return
318-
case <-time.After(backoff):
319-
}
320-
321-
backoff *= 2
322-
if backoff > seedReconnectMaxBackoff {
323-
backoff = seedReconnectMaxBackoff
324-
}
325-
}
326-
}
327-
328-
func (c *Client) newDisconnectNotifee() disconnectNotifee {
329-
return disconnectNotifee{c: c}
330-
}
331-
332-
// isConnected returns true if there is an active connection to the given peer.
333-
func (c *Client) isConnected(id peer.ID) bool {
334-
return c.host.Network().Connectedness(id) == network.Connected
335-
}
336-
337248
func (c *Client) listen() (host.Host, error) {
338249
maddr, err := multiaddr.NewMultiaddr(c.conf.ListenAddress)
339250
if err != nil {
@@ -345,7 +256,6 @@ func (c *Client) listen() (host.Host, error) {
345256

346257
func (c *Client) setupDHT(ctx context.Context) error {
347258
peers := c.parseAddrInfoList(c.conf.Peers)
348-
c.seedPeers = peers
349259
if len(peers) == 0 {
350260
c.logger.Info().Msg("no peers - only listening for connections")
351261
}

pkg/p2p/client_test.go

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -278,104 +278,6 @@ func waitForCondition(timeout time.Duration, conditionFunc func() bool) error {
278278
}
279279
}
280280

281-
func TestSeedPeerReconnect(t *testing.T) {
282-
require := require.New(t)
283-
assert := assert.New(t)
284-
logger := zerolog.Nop()
285-
286-
mn := mocknet.New()
287-
defer mn.Close()
288-
289-
seedKey, err := key.GenerateNodeKey()
290-
require.NoError(err)
291-
seedAddr, err := getAddr(seedKey.PrivKey)
292-
require.NoError(err)
293-
seedHost, err := mn.AddPeer(seedKey.PrivKey, seedAddr)
294-
require.NoError(err)
295-
296-
clientKey, err := key.GenerateNodeKey()
297-
require.NoError(err)
298-
clientAddr, err := getAddr(clientKey.PrivKey)
299-
require.NoError(err)
300-
clientHost, err := mn.AddPeer(clientKey.PrivKey, clientAddr)
301-
require.NoError(err)
302-
303-
seedAddrStr := seedHost.Addrs()[0].String() + "/p2p/" + seedHost.ID().String()
304-
conf := config.P2PConfig{Peers: seedAddrStr}
305-
306-
client, err := NewClient(conf, clientKey.PrivKey, dssync.MutexWrap(datastore.NewMapDatastore()), "test-chain", logger, NopMetrics())
307-
require.NoError(err)
308-
require.NotNil(client)
309-
310-
err = mn.LinkAll()
311-
require.NoError(err)
312-
err = mn.ConnectAllButSelf()
313-
require.NoError(err)
314-
315-
ctx := t.Context()
316-
err = client.startWithHost(ctx, clientHost)
317-
require.NoError(err)
318-
defer client.Close()
319-
320-
err = waitForCondition(2*time.Second, func() bool {
321-
return client.isConnected(seedHost.ID())
322-
})
323-
require.NoError(err, "client should connect to seed peer on start")
324-
325-
conns := client.host.Network().ConnsToPeer(seedHost.ID())
326-
for _, conn := range conns {
327-
conn.Close()
328-
}
329-
client.host.Network().ClosePeer(seedHost.ID())
330-
331-
assert.False(client.isConnected(seedHost.ID()), "seed peer should be disconnected")
332-
333-
err = waitForCondition(5*time.Second, func() bool {
334-
return client.isConnected(seedHost.ID())
335-
})
336-
require.NoError(err, "client should reconnect to seed peer after disconnect")
337-
}
338-
339-
func TestSeedPeerReconnectStopsOnClose(t *testing.T) {
340-
require := require.New(t)
341-
342-
mn := mocknet.New()
343-
defer mn.Close()
344-
345-
seedKey, err := key.GenerateNodeKey()
346-
require.NoError(err)
347-
seedAddr, err := getAddr(seedKey.PrivKey)
348-
require.NoError(err)
349-
seedHost, err := mn.AddPeer(seedKey.PrivKey, seedAddr)
350-
require.NoError(err)
351-
352-
clientKey, err := key.GenerateNodeKey()
353-
require.NoError(err)
354-
clientAddr, err := getAddr(clientKey.PrivKey)
355-
require.NoError(err)
356-
clientHost, err := mn.AddPeer(clientKey.PrivKey, clientAddr)
357-
require.NoError(err)
358-
359-
seedAddrStr := seedHost.Addrs()[0].String() + "/p2p/" + seedHost.ID().String()
360-
conf := config.P2PConfig{Peers: seedAddrStr}
361-
362-
client, err := NewClient(conf, clientKey.PrivKey, dssync.MutexWrap(datastore.NewMapDatastore()), "test-chain", zerolog.Nop(), NopMetrics())
363-
require.NoError(err)
364-
365-
err = mn.LinkAll()
366-
require.NoError(err)
367-
err = mn.ConnectAllButSelf()
368-
require.NoError(err)
369-
370-
ctx := t.Context()
371-
err = client.startWithHost(ctx, clientHost)
372-
require.NoError(err)
373-
374-
require.NoError(client.Close())
375-
376-
require.Error(client.ctx.Err(), "client context should be cancelled after Close")
377-
}
378-
379281
func TestClientInfoMethods(t *testing.T) {
380282
require := require.New(t)
381283
assert := assert.New(t)

0 commit comments

Comments
 (0)