mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-14 13:51:21 +00:00
rpc: /dial_peers: only mark peers as persistent if flag is on (#3620)
## Description also handle errors from DialPeersAsync remove nil addr from log msg fix TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode This is a follow-up from #3593 (review) Fixes most of the #3617, except #3593 (comment) ## Commits * rpc: /dial_peers: only mark peers as persistent if flag is on also - handle errors from DialPeersAsync - remove nil addr from log msg - fix TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode This is a follow-up from https://github.com/tendermint/tendermint/pull/3593#pullrequestreview-233556909 * remove a call to AddPersistentPeers TestDialFail will trigger a reconnect
This commit is contained in:
@ -682,8 +682,10 @@ func (n *Node) OnStart() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Always connect to persistent peers
|
// Always connect to persistent peers
|
||||||
// parsing errors are handled above by AddPersistentPeers
|
err = n.sw.DialPeersAsync(splitAndTrimEmpty(n.config.P2P.PersistentPeers, ",", " "))
|
||||||
_ = n.sw.DialPeersAsync(splitAndTrimEmpty(n.config.P2P.PersistentPeers, ",", " "))
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "could not dial peers from persistent_peers field")
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -330,7 +330,8 @@ func TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode(t *testing.T) {
|
|||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
defer os.RemoveAll(dir) // nolint: errcheck
|
defer os.RemoveAll(dir) // nolint: errcheck
|
||||||
|
|
||||||
pexR, book := createReactor(&PEXReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 1 * time.Millisecond})
|
pexRConfig := &PEXReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 1 * time.Millisecond}
|
||||||
|
pexR, book := createReactor(pexRConfig)
|
||||||
defer teardownReactor(book)
|
defer teardownReactor(book)
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(pexR)
|
sw := createSwitchAndAddReactors(pexR)
|
||||||
@ -353,6 +354,9 @@ func TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode(t *testing.T) {
|
|||||||
assert.Equal(t, 1, sw.Peers().Size())
|
assert.Equal(t, 1, sw.Peers().Size())
|
||||||
assert.True(t, sw.Peers().Has(peerSwitch.NodeInfo().ID()))
|
assert.True(t, sw.Peers().Has(peerSwitch.NodeInfo().ID()))
|
||||||
|
|
||||||
|
// sleep for SeedDisconnectWaitPeriod
|
||||||
|
time.Sleep(pexRConfig.SeedDisconnectWaitPeriod + 1*time.Millisecond)
|
||||||
|
|
||||||
// 2. attemptDisconnects should not disconnect because the peer is persistent
|
// 2. attemptDisconnects should not disconnect because the peer is persistent
|
||||||
pexR.attemptDisconnects()
|
pexR.attemptDisconnects()
|
||||||
assert.Equal(t, 1, sw.Peers().Size())
|
assert.Equal(t, 1, sw.Peers().Size())
|
||||||
|
@ -308,7 +308,7 @@ func (sw *Switch) StopPeerForError(peer Peer, reason interface{}) {
|
|||||||
addr, err = peer.NodeInfo().NetAddress()
|
addr, err = peer.NodeInfo().NetAddress()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sw.Logger.Error("Wanted to reconnect to inbound peer, but self-reported address is wrong",
|
sw.Logger.Error("Wanted to reconnect to inbound peer, but self-reported address is wrong",
|
||||||
"peer", peer, "addr", addr, "err", err)
|
"peer", peer, "err", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -410,7 +410,6 @@ func TestSwitchReconnectsToOutboundPersistentPeer(t *testing.T) {
|
|||||||
|
|
||||||
err = sw.DialPeerWithAddress(rp.Addr())
|
err = sw.DialPeerWithAddress(rp.Addr())
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
time.Sleep(50 * time.Millisecond)
|
|
||||||
require.NotNil(t, sw.Peers().Get(rp.ID()))
|
require.NotNil(t, sw.Peers().Get(rp.ID()))
|
||||||
|
|
||||||
p := sw.Peers().List()[0]
|
p := sw.Peers().List()[0]
|
||||||
@ -432,7 +431,7 @@ func TestSwitchReconnectsToOutboundPersistentPeer(t *testing.T) {
|
|||||||
defer rp.Stop()
|
defer rp.Stop()
|
||||||
|
|
||||||
conf := config.DefaultP2PConfig()
|
conf := config.DefaultP2PConfig()
|
||||||
conf.TestDialFail = true
|
conf.TestDialFail = true // will trigger a reconnect
|
||||||
err = sw.addOutboundPeerWithConfig(rp.Addr(), conf)
|
err = sw.addOutboundPeerWithConfig(rp.Addr(), conf)
|
||||||
require.NotNil(t, err)
|
require.NotNil(t, err)
|
||||||
// DialPeerWithAddres - sw.peerConfig resets the dialer
|
// DialPeerWithAddres - sw.peerConfig resets the dialer
|
||||||
|
@ -196,11 +196,14 @@ func UnsafeDialPeers(ctx *rpctypes.Context, peers []string, persistent bool) (*c
|
|||||||
return &ctypes.ResultDialPeers{}, errors.New("No peers provided")
|
return &ctypes.ResultDialPeers{}, errors.New("No peers provided")
|
||||||
}
|
}
|
||||||
logger.Info("DialPeers", "peers", peers, "persistent", persistent)
|
logger.Info("DialPeers", "peers", peers, "persistent", persistent)
|
||||||
if err := p2pPeers.AddPersistentPeers(peers); err != nil {
|
if persistent {
|
||||||
|
if err := p2pPeers.AddPersistentPeers(peers); err != nil {
|
||||||
|
return &ctypes.ResultDialPeers{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := p2pPeers.DialPeersAsync(peers); err != nil {
|
||||||
return &ctypes.ResultDialPeers{}, err
|
return &ctypes.ResultDialPeers{}, err
|
||||||
}
|
}
|
||||||
// parsing errors are handled above by AddPersistentPeers
|
|
||||||
_ = p2pPeers.DialPeersAsync(peers)
|
|
||||||
return &ctypes.ResultDialPeers{Log: "Dialing peers in progress. See /net_info for details"}, nil
|
return &ctypes.ResultDialPeers{Log: "Dialing peers in progress. See /net_info for details"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user