fix(cache): ensure LoadingOnceCache can only load once #1998
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.
Why?
Same as parca-dev/parca#3768
What?
馃 Generated by Copilot at 68d934c
Introduced a new cache type to prevent duplicate loading of data and improved cache interface naming in
pkg/cache/loading.go
.How?
馃 Generated by Copilot at 68d934c
Get
method ofLoadingLRUCacheWithTTL
togetOrLoad
and add a wrapperGet
method to preserve original interface (link, link)LoadingOnceCache
type that embedsLoadingLRUCacheWithTTL
and adds singleflight logic to coordinate concurrent requests for the same key (link)NewLoadingOnceCache
function to return a pointer toLoadingOnceCache
and initialize embedded cache and singleflight group (link)Get
method toLoadingOnceCache
that overrides embedded cache'sGet
method and uses singleflight group to memoize and return the value of the first call for the same key (link)Test Plan
Unit tests