fix: avoid too many concurrent db queries when cache becomes invalid#699
Open
fix: avoid too many concurrent db queries when cache becomes invalid#699
Conversation
In large installations it's more likely to process multiple storage_update events at the same time. When the storage mapping cache becomes invalid each of these events would try to query the database to update the cache. Apart from causing additional load on the database this would also exhaust sqlx's internal connection pool when more event handling threads are running than there are available database connections -- in this case the `Failed to query database: pool timed out while waiting for an open connection` message is logged. This commit changes how the storage mapping cache is updated once it becomes invalid by trying to reduce the chance of multiple threads querying the database at once. Other callers should then still retrieve the old cached mapping during the time the cache is updated. Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
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.
In large installations it's more likely that multiple storage_update events are processed at the same time. When the storage mapping cache becomes invalid each of these events would try to query the database to update the cache.
Apart from causing additional load on the database this would also exhaust sqlx's internal connection pool when more event handling threads are running than there are available database connections -- in this case the
Failed to query database: pool timed out while waiting for an open connectionmessage is logged.This PR changes how the storage mapping cache is updated once it becomes invalid by trying to reduce the chance of multiple threads querying the database at once. Other callers should then still retrieve the old cached mapping during the time the cache is updated.