Fix deadlock with concurrent identical actions #2104
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.
Address issue #2001 where workers deadlock when numerous identical actions run simultaneously.
Root causes and fixes
File permit exhaustion
download_to_directoryused unbounded parallelism, which could exhaust file permitsunder high concurrency. This is fixed by introducing
MAX_CONCURRENT_FILE_OPS = 64and switching tobuffer_unorderedto boundconcurrent file operations.
Race condition during action registration
create_and_add_actionchecked for duplicate actions after async work had begun,allowing identical actions to pass the check concurrently. This is fixed by
registering a placeholder entry before async work begins, with cleanup on failure,
ensuring duplicates are rejected deterministically.
Fixes #2001
Type of change
How has this been tested?
cargo checkcargo test download_to_directorynix develop(formatting, linting, Vale docs checks)Note: There is currently no test in the codebase that reproduces the exact concurrent
identical-action scenario described in #2001. This change addresses the identified
root causes deterministically.
Checklist
This change is