[
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)