fix: avoid race condition when building chain processors #288
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.
Background
I'm surprised this hasn't flared up before. Pigeons will usually "build processors" before every operation, meaning they will ask Paloma for the latest chain configuration and compare their local setup. In case there's a difference, they will rebuild their local setup to match what's asked for by Paloma.
The code for this was not written with concurrency in mind, but is part of most of our background tasks which all run concurrently. Therefore, updating the internal state would interfere with each other, leading to contradicting results, a ton of update calls, invalid and incomplete data in the valsets and more.
This change adds a read/write mutual exclusion lock around the code in question, ensuring that reads stay performant, but don't interfere with updating the internal state any longer.
Testing completed
Breaking changes