[ 
https://issues.apache.org/jira/browse/OAK-8063?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16783356#comment-16783356
 ] 

Francesco Mari commented on OAK-8063:
-------------------------------------

[~dulceanu], I like your patch very much since it greatly simplifies the 
transfer logic. I propose a third version of the patch with a minor change just 
to avoid repeating the same check in two different places and to consistently 
log the root segment ID where the traversal starts.

> The cold standby client doesn't correctly handle backward references
> --------------------------------------------------------------------
>
>                 Key: OAK-8063
>                 URL: https://issues.apache.org/jira/browse/OAK-8063
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segment-tar, tarmk-standby
>    Affects Versions: 1.6.0
>            Reporter: Andrei Dulceanu
>            Assignee: Andrei Dulceanu
>            Priority: Major
>              Labels: cold-standby
>             Fix For: 1.12, 1.11.0, 1.8.12, 1.10.2
>
>         Attachments: OAK-8063-02.patch, OAK-8063-03.patch, OAK-8063.patch
>
>
> The logic from {{StandbyClientSyncExecution#copySegmentHierarchyFromPrimary}} 
> has a flaw when it comes to "backward references". Suppose we have the 
> following data segment graph to be transferred from primary: S1, which 
> references \{S2, S3} and S3 which references S2. Then, the correct transfer 
> order should be S2, S3 and S1.
> Going through the current logic employed by the method, here's what happens:
> {noformat}
> Step 0: batch={S1}
> Step 1: visited={S1}, data={S1}, batch={S2, S3}, queued={S2, S3}
> Step 2: visited={S1, S2}, data={S2, S1}, batch={S3}, queued={S2, S3}
> Step 3: visited={S1, S2, S3}, data={S3, S2, S1}, batch={}, queued={S2, 
> S3}.{noformat}
> Therefore, at the end of the loop, the order of the segments to be 
> transferred will be S3, S2, S1, which might trigger a 
> {{SegmentNotFoundException}} when S3 is further processed, because S2 is 
> missing on standby (see OAK-8006).
> /cc [~frm]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to