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

Alex Parvulescu updated OAK-2752:
---------------------------------
    Attachment: OAK-2752-v2.patch

I think I have a better idea of why this happens and it looks like this was 
indeed introduced by OAK-2654.

What I missed initially with OAK-2654 was that refresh will also double the 
size of the list if the number of elements gets too large. So now the resize 
doesn't happen as often which triggers the infinite loop. This can be seen in 
the attached test, you only need to fill the entire table with entries and a 
search will loop forever as the resize method will never be called. resizing 
will basically add null entries at the end of the list which will basically 
break the infinite loop.

the fix is 100% [~wmcgaule]'s patch, I only added a small test.

> 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: Alex Parvulescu
>            Priority: Critical
>             Fix For: 1.0.13, 1.2.1
>
>         Attachments: OAK-2752-v2.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)

Reply via email to