mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 23:02:16 +00:00
p2p: do not log err if peer is private (#3474)
* add actionable advice for ErrAddrBookNonRoutable err Should replace https://github.com/tendermint/tendermint/pull/3463 * reorder checks in addrbook#addAddress so ErrAddrBookPrivate is returned first and do not log error in DialPeersAsync if the address is private because it's not an error
This commit is contained in:
parent
9a415b0572
commit
bcec8be035
@ -586,23 +586,10 @@ func (a *addrBook) addAddress(addr, src *p2p.NetAddress) error {
|
|||||||
return ErrAddrBookNilAddr{addr, src}
|
return ErrAddrBookNilAddr{addr, src}
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.routabilityStrict && !addr.Routable() {
|
|
||||||
return ErrAddrBookNonRoutable{addr}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !addr.Valid() {
|
|
||||||
return ErrAddrBookInvalidAddr{addr}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !addr.HasID() {
|
if !addr.HasID() {
|
||||||
return ErrAddrBookInvalidAddrNoID{addr}
|
return ErrAddrBookInvalidAddrNoID{addr}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: we should track ourAddrs by ID and by IP:PORT and refuse both.
|
|
||||||
if _, ok := a.ourAddrs[addr.String()]; ok {
|
|
||||||
return ErrAddrBookSelf{addr}
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := a.privateIDs[addr.ID]; ok {
|
if _, ok := a.privateIDs[addr.ID]; ok {
|
||||||
return ErrAddrBookPrivate{addr}
|
return ErrAddrBookPrivate{addr}
|
||||||
}
|
}
|
||||||
@ -611,6 +598,19 @@ func (a *addrBook) addAddress(addr, src *p2p.NetAddress) error {
|
|||||||
return ErrAddrBookPrivateSrc{src}
|
return ErrAddrBookPrivateSrc{src}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: we should track ourAddrs by ID and by IP:PORT and refuse both.
|
||||||
|
if _, ok := a.ourAddrs[addr.String()]; ok {
|
||||||
|
return ErrAddrBookSelf{addr}
|
||||||
|
}
|
||||||
|
|
||||||
|
if a.routabilityStrict && !addr.Routable() {
|
||||||
|
return ErrAddrBookNonRoutable{addr}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !addr.Valid() {
|
||||||
|
return ErrAddrBookInvalidAddr{addr}
|
||||||
|
}
|
||||||
|
|
||||||
ka := a.addrLookup[addr.ID]
|
ka := a.addrLookup[addr.ID]
|
||||||
if ka != nil {
|
if ka != nil {
|
||||||
// If its already old and the addr is the same, ignore it.
|
// If its already old and the addr is the same, ignore it.
|
||||||
|
@ -30,6 +30,10 @@ func (err ErrAddrBookPrivate) Error() string {
|
|||||||
return fmt.Sprintf("Cannot add private peer with address %v", err.Addr)
|
return fmt.Sprintf("Cannot add private peer with address %v", err.Addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (err ErrAddrBookPrivate) PrivateAddr() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
type ErrAddrBookPrivateSrc struct {
|
type ErrAddrBookPrivateSrc struct {
|
||||||
Src *p2p.NetAddress
|
Src *p2p.NetAddress
|
||||||
}
|
}
|
||||||
@ -38,6 +42,10 @@ func (err ErrAddrBookPrivateSrc) Error() string {
|
|||||||
return fmt.Sprintf("Cannot add peer coming from private peer with address %v", err.Src)
|
return fmt.Sprintf("Cannot add peer coming from private peer with address %v", err.Src)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (err ErrAddrBookPrivateSrc) PrivateAddr() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
type ErrAddrBookNilAddr struct {
|
type ErrAddrBookNilAddr struct {
|
||||||
Addr *p2p.NetAddress
|
Addr *p2p.NetAddress
|
||||||
Src *p2p.NetAddress
|
Src *p2p.NetAddress
|
||||||
|
@ -6,6 +6,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/config"
|
"github.com/tendermint/tendermint/config"
|
||||||
cmn "github.com/tendermint/tendermint/libs/common"
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||||||
"github.com/tendermint/tendermint/p2p/conn"
|
"github.com/tendermint/tendermint/p2p/conn"
|
||||||
@ -390,6 +392,15 @@ func (sw *Switch) MarkPeerAsGood(peer Peer) {
|
|||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
// Dialing
|
// Dialing
|
||||||
|
|
||||||
|
type privateAddr interface {
|
||||||
|
PrivateAddr() bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func isPrivateAddr(err error) bool {
|
||||||
|
te, ok := errors.Cause(err).(privateAddr)
|
||||||
|
return ok && te.PrivateAddr()
|
||||||
|
}
|
||||||
|
|
||||||
// DialPeersAsync dials a list of peers asynchronously in random order (optionally, making them persistent).
|
// DialPeersAsync dials a list of peers asynchronously in random order (optionally, making them persistent).
|
||||||
// Used to dial peers from config on startup or from unsafe-RPC (trusted sources).
|
// Used to dial peers from config on startup or from unsafe-RPC (trusted sources).
|
||||||
// TODO: remove addrBook arg since it's now set on the switch
|
// TODO: remove addrBook arg since it's now set on the switch
|
||||||
@ -412,10 +423,14 @@ func (sw *Switch) DialPeersAsync(addrBook AddrBook, peers []string, persistent b
|
|||||||
// do not add our address or ID
|
// do not add our address or ID
|
||||||
if !netAddr.Same(ourAddr) {
|
if !netAddr.Same(ourAddr) {
|
||||||
if err := addrBook.AddAddress(netAddr, ourAddr); err != nil {
|
if err := addrBook.AddAddress(netAddr, ourAddr); err != nil {
|
||||||
|
if isPrivateAddr(err) {
|
||||||
|
sw.Logger.Debug("Won't add peer's address to addrbook", "err", err)
|
||||||
|
} else {
|
||||||
sw.Logger.Error("Can't add peer's address to addrbook", "err", err)
|
sw.Logger.Error("Can't add peer's address to addrbook", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Persist some peers to disk right away.
|
// Persist some peers to disk right away.
|
||||||
// NOTE: integration tests depend on this
|
// NOTE: integration tests depend on this
|
||||||
addrBook.Save()
|
addrBook.Save()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user