Prevent concurrent changes on user permissions #22959
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.
Description:
Currently it can happen that two concurrent requests may try to update the permission of the same user.
Depending on how the requests are processed this can end up in a more or less undefined state, where some permissions or capabilities from any requests might be set or not.
To ensure that requests cannot mess up results of each other this PR introduces the use of a concurrency lock for all API methods that change user permission. This has the effect that each request will be processed completely before another request may try to perform its changes. This ensures that after processing a certain request the resulting state is as expected. Even though it might be changed by another request again straight after.
replaces #22957 and #22931
Review