provider: schedule prefix length #1116
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Part of #1095
Depends on #1115
The provider schedule (introduced in follow up PR) stores a mapping
prefix -> timestamp
, corresponding to the time at which a keyspace region represented by its prefix should be reprovided. When reproviding a region, all keys matching the region's prefix will be reprovided.Whenever users want to provide a key with
StartProviding
, if no prefix of the key is in the schedule yet, we take a prefix of the key whose length is the average of the prefixes already in the schedule (assume the keyspace region has the same peers population density as the average population density in teh DHT swarm).When the schedule is empty, we make a couple
GetClosestPeers
requests in order to have an approximation of the network size, helping to determine the initial prefix length to be used in the schedule.Note that no network provide can happen before
measureInitialPrefixLen
has completed.measureInitialPrefixLen
will block untilGetClosestPeers
return some peers, so it requires the node to have a connection, and therouter
(DHT client) to be bootstrapped. Anyway, if the DHT client isn't bootstrapped, no provide operation can succeed.provider
after provider: network operations #1115 is merged