[ https://issues.apache.org/jira/browse/OAK-2752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14496140#comment-14496140 ]
Thomas Mueller commented on OAK-2752: ------------------------------------- I have added more comments to the code. Removing the line in clearSegmentIdTables is needed because refresh() only re-builds the map if there is a hash collision _and_ there is an empty reference. If the reference is removed as well, then the map is not re-build, in which case you can end up with two segment id objects for the same segment. > SegmentIdTable can sometimes hang when calling getSegmentId(msb, lsb) > --------------------------------------------------------------------- > > Key: OAK-2752 > URL: https://issues.apache.org/jira/browse/OAK-2752 > Project: Jackrabbit Oak > Issue Type: Bug > Components: oak-core > Affects Versions: 1.2 > Reporter: Will McGauley > Assignee: Thomas Mueller > Priority: Critical > Fix For: 1.0.13, 1.2.1 > > Attachments: OAK-2752-md.patch, OAK-2752-md2.patch, > OAK-2752-tm1.patch, OAK-2752-tm2.patch, OAK-2752-v2.patch, OAK-2752-v3.patch, > OAK-2752.patch > > > The while loop getSegmentId(msb, lsb) loops forever in the situation where > the segment id is not found. > Looping occurs from 'first' and loops to the end of the SegmentId references, > and then loops back to first. If the segmentid is not found in any of the > referenced items then looping continues past 'first' again and loops for > eternity through all the references. > See attached patch for possible fix to break out of the loop after getting > back to 'first' again. > note: I have tested this patch on my system and it seems to work, but I do > not know if the patch provides the best fix, I am a bit new to this code. > The most important part of the patch would be the break condition from the > loop so the loop does not continue after testing each reference -- This message was sent by Atlassian JIRA (v6.3.4#6332)