-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Fix race condition in StreamHandler directory creation with locking #1967
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
TheJoeSchr
wants to merge
23
commits into
Seldaek:main
Choose a base branch
from
TheJoeSchr:fix/useLocking-also-lock-directory
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Fix race condition in StreamHandler directory creation with locking #1967
TheJoeSchr
wants to merge
23
commits into
Seldaek:main
from
TheJoeSchr:fix/useLocking-also-lock-directory
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…dler::createDir()`
… types differently on Windows and non-Windows systems
…hExponentialRandomizedRetries` => `attemptOperationWithExponentialRandomizedRetries`, Fix return type, Update PHPDoc
…ries` to include mixed return type
…le` => `$lockRessource`
…ing and error handling
…()::attemptOperationWithExponentialRandomizedRetries()`
…StreamHandler()::attemptOperationWithExponentialRandomizedRetries()`
…, first try to `fopen()` with read/write and then read only. Otherwise fails on already existing directories
…alization and checks before using
…tialRandomizedRetries()` for stream locking
3f3f84a
to
06a2ca4
Compare
If the lock can't be acquired, an exponential and randomized step-off with retries is implemented. This now also gets used for acquiring locks in |
df02e8d
to
3c2f101
Compare
3c2f101
to
ef86492
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This PR introduces a locking mechanism for directory creation in
StreamHandler
whenuseLocking
is enabled. This prevents race conditions when multiple processes (e.g., Laravel queue workers using a 'single' log stack) try to create thesame log directory simultaneously. The handler now creates a lock file in the parent directory, acquires an exclusive lock, creates the target directory, and then releases the lock.
Testing this fix:
To manually test this behavior, especially in a concurrent environment like Laravel queues:
useLocking
istrue
for yourStreamHandler
configuration.mkdir
attempts, and all jobs log as expected.New unit tests in
StreamHandlerTest.php
also cover thecreateDir
method's locking behavior.