Reload points cache off the main thread - #91
Open
GG-MD wants to merge 1 commit into
Open
Conversation
Author
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.
The Guava points cache uses
refreshAfterWrite, but Guava's default reload runssynchronously on the calling thread. So every ~30s a
give/takeon anonline player triggers a blocking SQLite query on the main server thread - spark
showed ~276ms stalls parked on the SQLite connection monitor.
Wrapped the
CacheLoaderinCacheLoader.asyncReloading(...), running refresheson the plugin's async scheduler instead. Stale entries are returned immediately
and refreshed in the background - no more tick stalls.
Balance correctness is unaffected: Guava drops the stale reload result if a
putlanded while it was running, and pending transactions are layered on topin
getEffectivePoints()regardless.Note: this only covers refresh of already-cached entries. A cold cache
miss (offline player, or an entry evicted after 5 min) still loads synchronously