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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there is an alternative way that use the
lru.ContainsOrAdd
interface and checkexist
boolean returnThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
curious why
onEvict
needs to be called when adding an existing item?This caused issue in our use case, where we used gRPC channel as
ent.value
, and onEvict will close the channel unexpectedly if we try to add that existing channel againThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll leave it for maintainers of this project to make the call
p/s: not sure why you adding back grpc connection to the cache that you just picked from
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand using evict when item is dropped from cache. But in this code block, why do we need to drop from cache? Isn't
c.evictList.moveToFront(ent)
is enough and the item should still be kept in the cache?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can see right after that the value is overrided with new value, so old value is drop, in your usecase it seems both values are same
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see, this behavior came as a surprise for us, as we had a large cache size and didn't expect evict callback to be triggered. Anyways, we can use something like
ContainsOrAdd
as you suggested