Fix race condition in ContainersService.create() #721
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.
Summary
Fixes #692
This PR resolves a race condition in
ContainersService.create()that occurs when creating containers with the same name concurrently.Changes
create()method body withlock.withLockto ensure atomic container creationawaitkeywords for actor isolation when accessingself.containerswithin the lock closuresetContainerState()with contextProblem
Without the lock, two concurrent
create()calls could both pass the existence check at line 133 and proceed to create the same container directory, resulting in filesystem errors like:Solution
By wrapping the entire method with
lock.withLock, only one container creation can proceed at a time. The second concurrent call will now properly receive:This follows the same pattern used in other methods like
bootstrap(),startProcess(), anddelete().Testing
make test)swift build)ContainersService#692