Repository navigation
[13.x] Don't swallow deadlocks in DatabaseLock inside a transaction - #61708
Merged
Merged
Conversation
Contributor
Author
|
Failing tests are not my fault.. |
DatabaseLock::acquire() inside a transactionDatabaseLock inside a transaction
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
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.
When the lock row insert hits a deadlock,
acquire()catches it like any other insert failure and falls through to the update. If the lock shares a connection with an open transaction, MySQL has already rolled that transaction back. Laravel still thinks it's open, so the app keeps running with its earlier writes gone and later writes autocommitting.This rethrows concurrency errors from the insert when the connection is inside a transaction, so
DB::transaction()can roll back or retry like it does for any other deadlock. The prune and release queries only ignore concurrency errors outside a transaction now too, since they would leave the same broken state. Outside a transaction nothing changes.Fixes #61707