fix: race condition when adding endpoints from goroutine #1484
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.
fixes race condition when setting endpoint subscription, appending to list of endpoints and setting endpoint stats.
Description:
When AddEndpoint() calls addEndpoint() the Endpoint is assigned a subscription, the service list of endpoints is appended to, and the Endpoint's stats field is populated. There is no lock around any of this and if the AddEndpoint method is called from another goroutine it can cause a race condition.
This PR includes a test that recreates the race condition and can be verified by removing the lock and unlock calls that have been added to service.go running the test
TestAddEndpoint_RaceCondition
with the-race
flag on. If you replace the lock/unlock calls the test will pass.