• Raúl Kripalani's avatar
    introduce adaptive queue for DHT dials. · 5e74c4a6
    Raúl Kripalani authored
    This patch introduces an adaptive dial queue that spawns a dynamically sized
    set of goroutines to preemptively stage dials for later handoff to the DHT
    protocol for RPC. It identifies backpressure on both ends (dial consumers and
    dial producers), and takes compensating action by adjusting the worker pool.
    
    We start with `DialQueueMinParallelism` number of workers (6), and scale up
    and down based on demand and supply of dialled peers.
    
    The following events trigger scaling:
    - we scale up when we can't immediately return a successful dial to a new
      consumer.
    - we scale down when we've been idle for a while waiting for new dial
      attempts.
    - we scale down when we complete a dial and realise nobody was waiting for it.
    
    Dialler throttling (e.g. FD limit exceeded) is a concern, as we can easily
    spin up more workers to compensate, and end up adding fuel to the fire. Since
    we have no deterministic way to detect this for now, we hard-limit concurrency
    to `DialQueueMaxParallelism` (20).
    5e74c4a6
query.go 7.68 KB