-
Notifications
You must be signed in to change notification settings - Fork 553
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
Improve ACL SETUSER Thread Handling Alternate Approach #1007
Open
kevinmichaelbowersox
wants to merge
7
commits into
microsoft:main
Choose a base branch
from
kevinmichaelbowersox:users/kbowersox/aclsetuser-threads-interlocked-handle
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
Improve ACL SETUSER Thread Handling Alternate Approach #1007
kevinmichaelbowersox
wants to merge
7
commits into
microsoft:main
from
kevinmichaelbowersox:users/kbowersox/aclsetuser-threads-interlocked-handle
Conversation
This file contains 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
3 tasks
Benchmark with Changes from SHA (977bcb4)
|
Baseline Benchmark from Main from SHA (61567d5)
|
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 pull requests fixes issue #988 . Please see the detailed discussion provided in the issue for a deeper discussion of the problem this PR addresses.
Quick Problem Overview
The ACL SETUSER command may produce inconsistent results when multiple clients/threads attempt to concurrently modify the same user. Please find test cases in this PR that demonstrate the concurrency issues this PR addresses.
Solution Overview
This PR addresses the issue by implementing the following changes:
User
. This avoids mangling of details about theUser
when under load and receiving simultaneous updates from multiple clients to update the same user.UserHandle
object was introduced that is used for all access to aUser
and used for replacing theUser
with a modified version of theUser
object. Types that rely uponUser
obtain theUserHandle
and then callGetUser
to retrieve the most recent version of the user including any modifications.UserHandle
provides aSetUser
method that can perform a thread safe replacement of theUser
referred to by theUserHandle
.User
to now useUserHandle
andUserHandle#GetUser()
.ACL SETUSER
implementation that handles concurrent attempts to create the same user, avoiding an exception that was previously thrown when the user already existed in the map.AdminCommands
to leverage theUserHandle
for obtaining theUser
during access control decisions. See benchmarks below.Testing and Verification
Other
Additional discussion regarding this issue can be seen in this draft PR where another solution was evaluated and discarded: #989