* Rework TestFindPeersQuery
Unravel the logic and create a minimal test case that isn't flaky.
* Use testing.T.Logf
* Skip the original test in short mode
* Add comments for the arguments to testFindPeerQuery
* Qualify aberrant package name
* Use redundant package names
* gx import testify 1.3.0.
* Remove signal bootstrapping
Remove IpfsDHT.BootstrapOnSignal.
* Type check expected interfaces on IpfsDHT
* Simplify the bootstrap logic
* Tidy up a few other things
* Include BootstrapOnce
* Add comment about duplicating sanity checks
* Use existing import naming convention
* Defer error wrapping until we need it
* Restore existing query count behaviour
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).
Both, dht.go and dht_bootstrap.go duplicate the package documentation.
The whole block had been moved to doc.go
Also query.go provides documentation for query package but now it
belongs to dht package, so it's been removed.