MemoryStore: prevent race condition #49542
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.
Motivation / Background
It looks like #46305 accidentally removed the synchronize block that would prevent a race conidition where two threads would read the same value and only a single increment/decrement would take effect as they would both write the same value.
Detail
This was discussed in this PR where the original fix for the expiry was being backported to 7.0
Additional information
Doesn't look like it's easy to deterministically test this. All I could do was to spin multiple threads and sometimes see inconsistencies, but not always
That comment shows how I played with it locally to exacerbates the behavior with
sleep
calls: #49503 (comment)Since 7.1 was just released, do we need a different PR to backport this to 7-1-stable?
Checklist
Before submitting the PR make sure the following are checked:
[Fix #issue-number]