download_file: use tempfile::Builder to avoid name collisions #5296
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.
Fixup for #5227.
The PR #5227 introduced a new flaky CI failure (example log).
The cause is this change after which the filename of a temporary download file became deterministic.
Before 5227:
./snapshots/tmp/download-{random}/{filename}
.After: 5227:
./snapshots/tmp/{filename}
.The CI test
recover-remote-concurrent
triggers a race condition because it tries to upload and restore multiple snapshots with the same name simultaneously.There are two possible ways to fix that:
recover_shard_snapshot
to usesnapshots_download_tempdir
(a random directory inside./snapshots/tmp
).download_file()
function to use random filename (viatempfile::Builder()
) instead of deterministic user-provided filename (viatempfile::TempPath::from_path()
).In this PR I took the second approach as I find it more clean.
The new temp file would be named like this:
./snapshots/tmp/{filename}-{random}.download
.Additionally, this PR updates the test to spawn 10 concurrent operations instead of 2 to increase the chance of catching this condition again.