-
Notifications
You must be signed in to change notification settings - Fork 1.2k
DATAREDIS-1117 - Improve doLock method to atomic. #518
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
Conversation
Related tickets: DATAREDIS-1117.
@christophstrobl Hi! I need feedback. is this pr has problem?
0f29937 to
9fbb477
Compare
Thanks for your pull request. There's indeed a loophole where checkAndPotentiallyWaitUntilUnlocked waits for unlocking but the lock acquisition happens later and potentially when someone has acquired the lock.
With locking, it makes sense to reduce the handling into a single place. Instead of modifying doLock, it makes sense to put the concept of locking directly into the execute method by passing a boolean flag, whether the execute callback requires a lock so execute and checkAndPotentiallyWaitUntilUnlocked can evaluate that flag and handle locking appropriately.
Related tickets: DATAREDIS-1117.
Related tickets: DATAREDIS-1117.
@mp911de Hi. I refactored the code based on your review. Thank you.
- All actions need locking for atomic processing. So handled lock in the
executemethod. (If "put" and "putIfAbsent" are called at the same time, can broken the atomic. becauseputis not guarantee applied the lock. I attached scenario image) - Because the code for judging locks has been separated, each method can only have its own responsibility.
Original pull request spring-projects#518 Closes spring-projects#1686
Related tickets: DATAREDIS-1117.
doLockmethod is not guarantee to acquire lock, so improved it.Improved
doLockmethod is guarantee to acquire lock, sowasLockedvariable is unnecessary. I removed it.You have read the Spring Data contribution guidelines.
There is a ticket in the bug tracker for the project in our JIRA.
You use the code formatters provided here and have them applied to your changes. Don’t submit any formatting related changes.
You submit test cases (unit or integration tests) that back your changes.
You added yourself as author in the headers of the classes you touched. Amend the date range in the Apache license header if needed. For new types, add the license header (copy from another file and set the current year only).