1) on connecting to a new peer -> trigger self & bucket bootstrap if RT size goes below thereshold
2) accept formatting & doc suggestions in the review
3) remove RT recovery code for now -> will address in a separate PR once #383 goes in
changes as per review
2) seed RT if empty before starting bootstrap incase 1 hasn't fired
3) pass bootstrap config as option while creating Dht
4) replace all bootstrap function with 1 function
* 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
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.
This way, users who are actually trying to find a peer (not just nodes near a
key in the DHT) can find that peer, even if they aren't a DHT server and/or
aren't in anyone's routing table.
fixes#161
Note: this does mean that the DHT won't work with peer keys by default and that
the constructor signature changes. Given all the changes that'll come with the
libp2p refactor, I don't feel too bad about this.
Before, we could end up (e.g.):
1. Creating two connections (both sides connect at the same time).
2. Try to test with the first one.
3. The first connection dies.
4. Get a stream reset and think that the other side doesn't support the DHT
protocol.
We tried to fix this by checking for an EOF. Unfortunately, reset streams don't
return EOFs.
This commit also simplifies peer tracking (and saves a bit of memory).
fixes#99
First, we use Alpha instead of K as the number of peers we grab from the
routing table (as per the kademlia paper).
Second, we don't use a size limited set for the 'GetClosestPeers' query.
We're going to process more than K peers before we find the K closest
peers.
Third, Change GetClosestPeers to actually return the K Closest peers,
not a hodge podge of peers that it found on the way to finding the
closest peers.