Browse Source

p2p: re-check after sleeps

pull/2663/head
Mehmet Gurevin 6 years ago
parent
commit
7f41070da0
3 changed files with 19 additions and 3 deletions
  1. +5
    -0
      p2p/netaddress.go
  2. +3
    -1
      p2p/pex/pex_reactor.go
  3. +11
    -2
      p2p/switch.go

+ 5
- 0
p2p/netaddress.go View File

@ -34,6 +34,11 @@ type NetAddress struct {
// IDAddressString returns id@hostPort. // IDAddressString returns id@hostPort.
func IDAddressString(id ID, hostPort string) string { 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) return fmt.Sprintf("%s@%s", id, hostPort)
} }


+ 3
- 1
p2p/pex/pex_reactor.go View File

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


+ 11
- 2
p2p/switch.go View File

@ -325,6 +325,11 @@ func (sw *Switch) reconnectToPeer(addr *NetAddress) {
return 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) err := sw.DialPeerWithAddress(addr, true)
if err == nil { if err == nil {
return // success return // success
@ -412,12 +417,16 @@ func (sw *Switch) DialPeersAsync(addrBook AddrBook, peers []string, persistent b
if addr.Same(ourAddr) { if addr.Same(ourAddr) {
sw.Logger.Debug("Ignore attempt to connect to ourselves", "addr", addr, "ourAddr", ourAddr) sw.Logger.Debug("Ignore attempt to connect to ourselves", "addr", addr, "ourAddr", ourAddr)
return 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) sw.Logger.Debug("Ignore attempt to connect to an existing peer", "addr", addr)
return return
} }
sw.randomSleep(0)
err := sw.DialPeerWithAddress(addr, persistent) err := sw.DialPeerWithAddress(addr, persistent)
if err != nil { if err != nil {
switch err.(type) { switch err.(type) {


Loading…
Cancel
Save