Skip to content
  • Felix Lange's avatar
    dcae0d34
    p2p/simulations: fix a deadlock and clean up adapters (#17891) · dcae0d34
    Felix Lange authored
    This fixes a rare deadlock with the inproc adapter:
    
    - A node is stopped, which acquires Network.lock.
    - The protocol code being simulated (swarm/network in my case)
      waits for its goroutines to shut down.
    - One of those goroutines calls into the simulation to add a peer,
      which waits for Network.lock.
    
    The fix for the deadlock is really simple, just release the lock
    before stopping the simulation node.
    
    Other changes in this PR clean up the exec adapter so it reports
    node startup errors better and remove the docker adapter because
    it just adds overhead.
    
    In the exec adapter, node information is now posted to a one-shot
    server. This avoids log parsing and allows reporting startup
    errors to the simulation host.
    
    A small change in package node was needed because simulation
    nodes use port zero. Node.{HTTP,WS}Endpoint now return the live
    endpoints after startup by checking the TCP listener.
    dcae0d34
    p2p/simulations: fix a deadlock and clean up adapters (#17891)
    Felix Lange authored
    This fixes a rare deadlock with the inproc adapter:
    
    - A node is stopped, which acquires Network.lock.
    - The protocol code being simulated (swarm/network in my case)
      waits for its goroutines to shut down.
    - One of those goroutines calls into the simulation to add a peer,
      which waits for Network.lock.
    
    The fix for the deadlock is really simple, just release the lock
    before stopping the simulation node.
    
    Other changes in this PR clean up the exec adapter so it reports
    node startup errors better and remove the docker adapter because
    it just adds overhead.
    
    In the exec adapter, node information is now posted to a one-shot
    server. This avoids log parsing and allows reporting startup
    errors to the simulation host.
    
    A small change in package node was needed because simulation
    nodes use port zero. Node.{HTTP,WS}Endpoint now return the live
    endpoints after startup by checking the TCP listener.
Loading