Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.6.0
Description
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:
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}.
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
Attachments
Attachments
Issue Links
- is related to
-
OAK-8006 SegmentBlob#readLongBlobId might cause SegmentNotFoundException on standby
- Closed