p2p: re-check after sleeps

This commit is contained in:
Mehmet Gurevin
2018-10-18 18:52:51 +03:00
parent 14c1baeb24
commit 7f41070da0
3 changed files with 19 additions and 3 deletions

View File

@@ -34,6 +34,11 @@ type NetAddress struct {
// IDAddressString returns id@hostPort.
func IDAddressString(id ID, hostPort string) string {
// we respect the protocol definition in here.
if p := strings.Index(hostPort, "://"); p > -1 {
return fmt.Sprintf("%s://%s@%s", hostPort[:p], id, hostPort[p+3:])
}
return fmt.Sprintf("%s@%s", id, hostPort)
}

View File

@@ -8,7 +8,6 @@ import (
"time"
"github.com/pkg/errors"
amino "github.com/tendermint/go-amino"
cmn "github.com/tendermint/tendermint/libs/common"
"github.com/tendermint/tendermint/p2p"
@@ -395,6 +394,9 @@ func (r *PEXReactor) ensurePeers() {
if r.Switch.IsDialingOrExistingAddress(try) {
continue
}
if r.Switch.NodeInfo().ID == try.ID {
continue // we don't want to dial ourselves, usually.
}
// TODO: consider moving some checks from toDial into here
// so we don't even consider dialing peers that we want to wait
// before dialling again, or have dialed too many times already

View File

@@ -325,6 +325,11 @@ func (sw *Switch) reconnectToPeer(addr *NetAddress) {
return
}
if sw.IsDialingOrExistingAddress(addr) {
sw.Logger.Info("Peer connection has been established or dialed while we waiting next try", "addr", addr)
return
}
err := sw.DialPeerWithAddress(addr, true)
if err == nil {
return // success
@@ -412,12 +417,16 @@ func (sw *Switch) DialPeersAsync(addrBook AddrBook, peers []string, persistent b
if addr.Same(ourAddr) {
sw.Logger.Debug("Ignore attempt to connect to ourselves", "addr", addr, "ourAddr", ourAddr)
return
} else if sw.IsDialingOrExistingAddress(addr) {
}
sw.randomSleep(0)
// check the destination address in established/dialed peers after sleep.
if sw.IsDialingOrExistingAddress(addr) {
sw.Logger.Debug("Ignore attempt to connect to an existing peer", "addr", addr)
return
}
sw.randomSleep(0)
err := sw.DialPeerWithAddress(addr, persistent)
if err != nil {
switch err.(type) {