OSDN Git Service

Add release note for v1.0.2
[bytom/bytom.git] / p2p / switch.go
index cfee40a..b8d3fc7 100644 (file)
@@ -20,7 +20,7 @@ import (
 )
 
 const (
-       reconnectAttempts = 10
+       reconnectAttempts = 5
        reconnectInterval = 10 * time.Second
 
        bannedPeerKey      = "BannedPeer"
@@ -331,7 +331,7 @@ func (sw *Switch) DialSeeds(addrBook *AddrBook, seeds []string) error {
        }
        //permute the list, dial them in random order.
        perm := rand.Perm(len(netAddrs))
-       for i := 0; i < len(perm)/2; i++ {
+       for i := 0; i < len(perm); i += 2 {
                j := perm[i]
                sw.dialSeed(netAddrs[j])
        }
@@ -340,7 +340,7 @@ func (sw *Switch) DialSeeds(addrBook *AddrBook, seeds []string) error {
 }
 
 func (sw *Switch) dialSeed(addr *NetAddress) {
-       peer, err := sw.DialPeerWithAddress(addr, true)
+       peer, err := sw.DialPeerWithAddress(addr, false)
        if err != nil {
                log.WithField("error", err).Error("Error dialing seed")
        } else {
@@ -363,13 +363,10 @@ func (sw *Switch) DialPeerWithAddress(addr *NetAddress, persistent bool) (*Peer,
        sw.dialing.Set(addr.IP.String(), addr)
        defer sw.dialing.Delete(addr.IP.String())
 
-       log.WithField("address", addr).Info("Dialing peer")
+       log.Debug("Dialing peer address:", addr)
        peer, err := newOutboundPeerWithConfig(addr, sw.reactorsByCh, sw.chDescs, sw.StopPeerForError, sw.nodePrivKey, sw.peerConfig)
        if err != nil {
-               log.WithFields(log.Fields{
-                       "address": addr,
-                       "error":   err,
-               }).Info("Failed to dial peer")
+               log.Debug("Failed to dial peer", " address:", addr, " error:", err)
                return nil, err
        }
        peer.SetLogger(sw.Logger.With("peer", addr))
@@ -449,7 +446,7 @@ func (sw *Switch) StopPeerForError(peer *Peer, reason interface{}) {
                                return
                        }
 
-                       peer, err := sw.DialPeerWithAddress(addr, true)
+                       peer, err := sw.DialPeerWithAddress(addr, false)
                        if err != nil {
                                if i == reconnectAttempts {
                                        log.WithFields(log.Fields{
@@ -490,7 +487,9 @@ func (sw *Switch) stopAndRemovePeer(peer *Peer, reason interface{}) {
                reactor.RemovePeer(peer, reason)
        }
        sw.peers.Remove(peer)
+       log.Info("Del peer from switch.")
        peer.Stop()
+       log.Info("Peer connection is closed.")
 }
 
 func (sw *Switch) listenerRoutine(l Listener) {
@@ -500,15 +499,15 @@ func (sw *Switch) listenerRoutine(l Listener) {
                        break
                }
 
-               // ignore connection if we already have enough
-               maxPeers := sw.config.MaxNumPeers
-               if maxPeers <= sw.peers.Size() {
+               // disconnect if we alrady have 2 * MaxNumPeers, we do this because we wanna address book get exchanged even if
+               // the connect is full. The pex will disconnect the peer after address exchange, the max connected peer won't
+               // be double of MaxNumPeers
+               if sw.config.MaxNumPeers*2 <= sw.peers.Size() {
                        // close inConn
                        inConn.Close()
                        log.WithFields(log.Fields{
                                "address":  inConn.RemoteAddr().String(),
                                "numPeers": sw.peers.Size(),
-                               "max":      maxPeers,
                        }).Info("Ignoring inbound connection: already have enough peers")
                        continue
                }