[
https://issues.apache.org/jira/browse/OAK-2654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alex Parvulescu updated OAK-2654:
---------------------------------
Attachment: OAK-2654.patch
proposed patch. This will reduce the number of refresh calls to only when a
null value is actually seen.
The hotspot here came from creating new segments, so a different approach might
be to duplicate this method and add a version specifically for inserting new
segment references which doesn't trigger a refresh at all.
cc. [~mduerig] [~chetanm]
> SegmentIdTable too eager to refresh
> -----------------------------------
>
> Key: OAK-2654
> URL: https://issues.apache.org/jira/browse/OAK-2654
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: segmentmk
> Reporter: Alex Parvulescu
> Assignee: Alex Parvulescu
> Fix For: 1.1.8, 1.2
>
> Attachments: OAK-2654.patch
>
>
> Calling SegmentIdTable#getSegmentId might trigger a reference table refresh
> if a certain condition is met, I think that this condition is too eager to
> trigger the refresh and in high write scenarios, this results in large pauses
> as the method is synchronized.
> The current condition resembles a cache miss (_index != first_) which means
> that when looking up a segment id by the _lsb_ it might happen that it either
> - is not there, so it needs to be added (no refresh on this branch)
> - or there is an overlap on lsb values (actually on the value returned by
> _getIndex(lsb)_), in which case a refresh will be triggered.
> In high write scenarios the refresh case happens a lot more frequently so a
> refresh is triggered, even if it might not be needed. a refresh makes sense
> when there are null references and it might make sense for them to be
> collected otherwise we're just creating clones of the same map over and over
> again.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)