perf(artifacts): pipeline the artifact file uploader #7586
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.
Description
Rewrite of
ArtifactSaver.uploadFiles
to use buffered channels and switch between available pending tasksThis is an alternative to #7274, and should be considered to supersede it. It's dramatically simpler, has similar (though slightly lower) performance, and handles retries better.
Key differences:
Minor differences:
Differences:
time.Ticker
channel in the futureData flow:
Assemble batches
While not done:
If files fail to upload, collect them to retry. Retry all failed uploads by rerunning the above as long as each time we succeed for at least half the files.
Testing
Very extensively tested for performance (on extremely large artifacts).
Relies somewhat heavily on existing integration tests in CI for correctness.