[
https://issues.apache.org/jira/browse/OAK-3168?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14647668#comment-14647668
]
Thomas Mueller commented on OAK-3168:
-------------------------------------
> what Guava Cache is doing ...
> the notification itself also contains the reason, of which 'REPLACED' can be
> a possible value.
Would it be OK for you if I try that?
> SegmentCache flushes Segment on update
> --------------------------------------
>
> Key: OAK-3168
> URL: https://issues.apache.org/jira/browse/OAK-3168
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: segmentmk
> Reporter: Alex Parvulescu
> Assignee: Alex Parvulescu
> Fix For: 1.3.5
>
>
> The SegmentCache currently uses the cache eviction call to remove the Segment
> instance from memory to help keep the cache memory requirements under control
> [0].
> What I've noticed though, is that for a cache update (existing key) there
> will also be an eviction call happening, which results in a lot of extra IO
> pressure on the SegmentStore which not only is not able to cache the segment,
> but is forced to reload it multiple times as the reference gets nullified
> after each load.
> This comes from the sampling behavior of the SegmentId: it will not hit the
> cache each time it needs to load a new Segment, but rather load it from IO
> and (re)place it in the cache, based on a sampling rate [1].
> Now I see 2 options:
> * change the cache code to _not_ call the eviction callback on updates (or
> allow disabling this call on updates)
> * change the SegmentTracker code to add the value to the cache only if it's
> not there as Segments are immutable, so no harm done.
> Raised this issue offline with [~tmueller], [~mduerig] first and as I
> understand [~mduerig] is in favor of option one, while [~tmueller] proposed
> that the Lirs cache impl should be inline with what the guava cache does, and
> depending on that we could choose the right fix here.
> Hope this covers everything.
> [0]
> https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java#L133
> [1]
> https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentId.java#L135
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)