[jira] [Updated] (OAK-2654) SegmentIdTable too eager to refresh

2015-03-20 Thread Alex Parvulescu (JIRA)

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


[jira] [Updated] (OAK-2654) SegmentIdTable too eager to refresh

2015-03-20 Thread Alex Parvulescu (JIRA)

 [ 
https://issues.apache.org/jira/browse/OAK-2654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Parvulescu updated OAK-2654:
-
Fix Version/s: 1.2
   1.1.8

 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)