Github user ben-manes commented on the issue:

    https://github.com/apache/storm/pull/2218
  
    fyi, you can emulate pinning by setting the entry's weight to zero. Then 
the entry will not be evicted, but is eligible for expiration, etc. Of course 
zero weight entries means the cache allows more entries overall, whereas 
pinning might still restrict overall capacity. But its not clear how to a cache 
should handle evictions when not enough space can be freed from unpinned 
entries.
    
    The other approach is less elegant. A `CacheWriter` can intercept an 
eviction and a `CacheLoader` intercepts gets to fetch a missing entry. Since 
recursive computations are disallowed, the writer could re-put the entry 
asynchronously. This races with a `get`, so the loader could fetch from the map 
prior to some other data store. In some ways not too dissimilar to your own 
pinned cache.
    
    In general pinning breaks the caching model of recomputable transient state 
and the eviction policy will try to avoid pollution by removing low-value 
entries early. Generally it can lead to O(n) evictions unless maintained in a 
dedicated LRU queue so that potential victims are not evaluated. Since pinning 
vs capacity is confusing, right now Caffeine favors zero weights since the 
use-cases are unclear.
    
    Hope that helps. I agree your own logic may be more straightforward and 
preferable.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to