• Felix Lange's avatar
    p2p: new dial scheduler (#20592) · 90caa2ca
    Felix Lange authored
    * p2p: new dial scheduler
    
    This change replaces the peer-to-peer dial scheduler with a new and
    improved implementation. The new code is better than the previous
    implementation in two key aspects:
    
    - The time between discovery of a node and dialing that node is
      significantly lower in the new version. The old dialState kept
      a buffer of nodes and launched a task to refill it whenever the buffer
      became empty. This worked well with the discovery interface we used to
      have, but doesn't really work with the new iterator-based discovery
      API.
    
    - Selection of static dial candidates (created by Server.AddPeer or
      through static-nodes.json) performs much better for large amounts of
      static peers. Connections to static nodes are now limited like dynanic
      dials and can no longer overstep MaxPeers or the dial ratio.
    
    * p2p/simulations/adapters: adapt to new NodeDialer interface
    
    * p2p: re-add check for self in checkDial
    
    * p2p: remove peersetCh
    
    * p2p: allow static dials when discovery is disabled
    
    * p2p: add test for dialScheduler.removeStatic
    
    * p2p: remove blank line
    
    * p2p: fix documentation of maxDialPeers
    
    * p2p: change "ok" to "added" in static node log
    
    * p2p: improve dialTask docs
    
    Also increase log level for "Can't resolve node"
    
    * p2p: ensure dial resolver is truly nil without discovery
    
    * p2p: add "looking for peers" log message
    
    * p2p: clean up Server.run comments
    
    * p2p: fix maxDialedConns for maxpeers < dialRatio
    
    Always allocate at least one dial slot unless dialing is disabled using
    NoDial or MaxPeers == 0. Most importantly, this fixes MaxPeers == 1 to
    dedicate the sole slot to dialing instead of listening.
    
    * p2p: fix RemovePeer to disconnect the peer again
    
    Also make RemovePeer synchronous and add a test.
    
    * p2p: remove "Connection set up" log message
    
    * p2p: clean up connection logging
    
    We previously logged outgoing connection failures up to three times.
    
    - in SetupConn() as "Setting up connection failed addr=..."
    - in setupConn() with an error-specific message and "id=... addr=..."
    - in dial() as "Dial error task=..."
    
    This commit ensures a single log message is emitted per failure and adds
    "id=... addr=... conn=..." everywhere (id= omitted when the ID isn't
    known yet).
    
    Also avoid printing a log message when a static dial fails but can't be
    resolved because discv4 is disabled. The light client hit this case all
    the time, increasing the message count to four lines per failed
    connection.
    
    * p2p: document that RemovePeer blocks
    90caa2ca
Name
Last commit
Last update
..
adapters Loading commit data...
examples Loading commit data...
pipes Loading commit data...
README.md Loading commit data...
connect.go Loading commit data...
connect_test.go Loading commit data...
events.go Loading commit data...
http.go Loading commit data...
http_test.go Loading commit data...
mocker.go Loading commit data...
mocker_test.go Loading commit data...
network.go Loading commit data...
network_test.go Loading commit data...
simulation.go Loading commit data...
test.go Loading commit data...