Keep single-use routes for a few seconds before pruning them #4219
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.
As discussed in issue #4016,
ui.download
can fail on the auto-index page if multiple tabs try to download from a single-use route at the same time. The first download will remove the route and subsequent downloads will fail.This PR addresses this problem by keeping used single-use routes in a dictionary with an expiration timestamp. A pruning loop will check this dictionary every 10 seconds and remove outdated routes.
Note that simply delaying the removal after creating a single-use route did not work. The path of a single-use route is basically a hash of the filepath and, thus, not unique to a single call to
ui.download
. Therefore a route could be used again and again, so we need to keep it as long asui.download
is still being called.