meta/sql: remove lock on edge to avoid deadlock #3677
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.
When MySQL is used as meta engine, the lock on edge is a gap lock, which can overlap with other directories, can cause deadlock.
Since we always lock the parent directory, so the lock for edge is useless, remove them to avoid deadlock.
Some lock on child node is also removed, since the update of some column is atomic or already protected by the lock of parent dir.
There is still a chance to deadlock in rename, because we have to lock the target sub-directory (for overwrite), which could be locked first by other rename. We left this for database to detect it and retry the transactions.
close #3665