good morning!!!!

Skip to content
Snippets Groups Projects
  1. Feb 18, 2019
    • Péter Szilágyi's avatar
      75a93147
    • Ferenc Szabo's avatar
      p2p, swarm: fix node up races by granular locking (#18976) · 50b872bf
      Ferenc Szabo authored
      * swarm/network: DRY out repeated giga comment
      
      I not necessarily agree with the way we wait for event propagation.
      But I truly disagree with having duplicated giga comments.
      
      * p2p/simulations: encapsulate Node.Up field so we avoid data races
      
      The Node.Up field was accessed concurrently without "proper" locking.
      There was a lock on Network and that was used sometimes to access
      the  field. Other times the locking was missed and we had
      a data race.
      
      For example: https://github.com/ethereum/go-ethereum/pull/18464
      The case above was solved, but there were still intermittent/hard to
      reproduce races. So let's solve the issue permanently.
      
      resolves: ethersphere/go-ethereum#1146
      
      * p2p/simulations: fix unmarshal of simulations.Node
      
      Making Node.Up field private in 13292ee897e345045fbfab3bda23a77589a271c1
      broke TestHTTPNetwork and TestHTTPSnapshot. Because the default
      UnmarshalJSON does not handle unexported fields.
      
      Important: The fix is partial and not proper to my taste. But I cut
      scope as I think the fix may require a change to the current
      serialization format. New ticket:
      https://github.com/ethersphere/go-ethereum/issues/1177
      
      * p2p/simulations: Add a sanity test case for Node.Config UnmarshalJSON
      
      * p2p/simulations: revert back to defer Unlock() pattern for Network
      
      It's a good patten to call `defer Unlock()` right after `Lock()` so
      (new) error cases won't miss to unlock. Let's get back to that pattern.
      
      The patten was abandoned in 85a79b3a,
      while fixing a data race. That data race does not exist anymore,
      since the Node.Up field got hidden behind its own lock.
      
      * p2p/simulations: consistent naming for test providers Node.UnmarshalJSON
      
      * p2p/simulations: remove JSON annotation from private fields of Node
      
      As unexported fields are not serialized.
      
      * p2p/simulations: fix deadlock in Network.GetRandomDownNode()
      
      Problem: GetRandomDownNode() locks -> getDownNodeIDs() ->
      GetNodes() tries to lock -> deadlock
      
      On Network type, unexported functions must assume that `net.lock`
      is already acquired and should not call exported functions which
      might try to lock again.
      
      * p2p/simulations: ensure method conformity for Network
      
      Connect* methods were moved to p2p/simulations.Network from
      swarm/network/simulation. However these new methods did not follow
      the pattern of Network methods, i.e., all exported method locks
      the whole Network either for read or write.
      
      * p2p/simulations: fix deadlock during network shutdown
      
      `TestDiscoveryPersistenceSimulationSimAdapter` often got into deadlock.
      The execution was stuck on two locks, i.e, `Kademlia.lock` and
      `p2p/simulations.Network.lock`. Usually the test got stuck once in each
      20 executions with high confidence.
      
      `Kademlia` was stuck in `Kademlia.EachAddr()` and `Network` in
      `Network.Stop()`.
      
      Solution: in `Network.Stop()` `net.lock` must be released before
      calling `node.Stop()` as stopping a node (somehow - I did not find
      the exact code path) causes `Network.InitConn()` to be called from
      `Kademlia.SuggestPeer()` and that blocks on `net.lock`.
      
      Related ticket: https://github.com/ethersphere/go-ethereum/issues/1223
      
      * swarm/state: simplify if statement in DBStore.Put()
      
      * p2p/simulations: remove faulty godoc from private function
      
      The comment started with the wrong method name.
      
      The method is simple and self explanatory. Also, it's private.
      => Let's just remove the comment.
      50b872bf
  2. Feb 17, 2019
  3. Feb 16, 2019
  4. Feb 15, 2019
  5. Feb 14, 2019
  6. Feb 13, 2019
  7. Feb 12, 2019
  8. Feb 08, 2019
  9. Feb 07, 2019
Loading