Fix concurrent SetTags race on config.Tags - #836
Open
BetterAndBetterII wants to merge 1 commit into
Open
Conversation
Serialize tag map updates under tagsLock, snapshot tags for NodeMeta and query filters, and serialize memberlist.UpdateNode so concurrent SetTags calls match the Serf concurrent-safety guarantee.
This file contains hidden or 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
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.
Description
Serf.SetTagswroteconfig.Tagswithout synchronization even though theSerfgodoc states that all methods are safe to call concurrently. ConcurrentSetTagscalls (and concurrent reads viaNodeMeta/ query tag filters) race on the tag map, and concurrentmemberlist.UpdateNodecalls can also race.This change:
config.TagswithtagsLockNodeMetaand query tag filtersmemberlist.UpdateNodefromSetTagsRelated Issue
Fixes #621
How Has This Been Tested?
Added
TestSerf_SetTags_Concurrent, which failed under-racebefore the lock and passes after.Contributor Checklist