feat: deduplicate shared URL downloads across test suites#338
Conversation
|
@ylatuya ping |
|
@rsanchez87 can you have a look to this PR as well? The idea would be to fast up the build of docker images containing all the test suites |
| return (url, local_path) | ||
|
|
||
| max_workers = max(1, min(jobs, len(unique_source_list))) | ||
| with ThreadPoolExecutor(max_workers=max_workers) as dl_pool: |
There was a problem hiding this comment.
We use Pool from multiprocessing
There was a problem hiding this comment.
The idea is to move all the logic for download pool inside the download manager which handled the dedup, the thread lock, the extraction and everything to download through ThreadPoolExecutor.
Do you have a preference for multiprocessing for a reason ?
@dabrain34, tested with Also regression tests ✔️ I’ll test again once the requested changes by @ylatuya are implemented. Thanks! |
|
thanks for the test, indeed this is even better on low speed lines as we dont redownload all the time the AV1 zip file. I'm currently addressing comments from ylatuya. When this is ready I will come back to you |
dc31a68 to
a3b3d5f
Compare
a3b3d5f to
2bfdac4
Compare
|
@dabrain34 @ylatuya was the question of using threads vs processes resolved in another channel perhaps? Is there anything else blocking this from being merged? |
|
@dabrain34 I think the current implementation is overly complicated for what it's trying to achieve, the My proposal in the previous review may not have been expressed clearly, but what I was proposing is to move all the existing download logic from
To this:
This approach simplifies things since all the download logic is kept in a single place, the |
|
@dabrain34, this is an example of how I would like the implementation to look like ylatuya@4bfa256. (There seems to be a bug in Github that does not include the changes in That way, we keep all the download logic in a single place, the |
|
I'm about to push something where utils.py has been replaced by download_manager.py |
2bfdac4 to
e71aa18
Compare
|
I think I addressed your request by moving all the downloadmager code to a specific file and move the test suite download to this module as well. Please give it a try and let me know. |
e71aa18 to
6321d15
Compare
Introduce a centralized DownloadManager so each URL is downloaded at most once, both within and across selected suites. Saves re-fetching multi-GB archives like AV1-ARGON shared by 12 suites. DownloadManager (fluster/download_manager.py): - Thread-safe per-URL caching at resources/.cache/; concurrent get() calls on the same URL block on the in-flight download. - BoundedSemaphore caps HTTP concurrency at 8. - Per-URL retry budget; ChecksumMismatchError poisons immediately. - invalidate(url) lets consumers drop a corrupt cached archive. - Context manager: cleanup() runs via __exit__, honoring keep_file. - filename_from_url() strips query strings for safe on-disk names. DownloadManager.download_test_suite() (fluster/download_manager.py): - Owns all three download paths (single archive, single file, multi-TV). - Multi-TV branch pre-downloads unique URLs in parallel before the multiprocessing extraction pool. - Raw source files are moved out of the cache (no double storage). - Moved out of TestSuite, which is now a pure data/test domain object. CLI (fluster/fluster.py): - Three-phase: collect URLs across selected suites, parallel pre-download, per-suite extraction. Cross-suite parallelism is the main user-visible win. - All callers (CLI + 7 scripts/gen_*.py) use the with-statement form.
6321d15 to
388a4b4
Compare
|
so you merged #362 first which leads this PR to conflicts (again). I think it would have been better to review and merge this first as it was modifying the download mechanism for real performance improvement in comparison to mirror. The AV1 test suite download repeats the 6.5GB DL on every test vector, it has to be improved for CI purpose, see Mesa CI. |
|
Please let me know if I should invest more time on rebasing and resolving conflicts as it might enter your roadmap. |
Introduce a centralized DownloadManager that ensures each URL is downloaded at most once, eliminating duplicate downloads both across test suites and within a single test suite.
This feature allows to fast up considerably the download of AV1-ARGON* which was downloading each time the 6GB archive for every test vector.
Fix #309