Split big storage proof requests into smaller ones #1209
Merged
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.
cc #692 (probably fixes it, but I'm not sure) @josepot
This PR adds some code that dynamically splits big storage requests into smaller ones.
The way it works is pretty simple: we estimate the number of nodes that will be returned by the remote, and if it's above a certain cap we send the request in preparation now and will send the rest later.
Additionally, if there's a timeout or something like that, we reduce the cap.
Note that this gives the possibility for a malicious peer to intentionally not respond and reduce the cap, but given that peers selection is in principle random this is in practice normally not a problem.
I haven't tested whether this PR works as intended or not. I've tested whether storage proofs in general still work, and they do, but I don't know how to test whether big requests work.