• Heikki Linnakangas's avatar
    Use the right timeline when beginning to stream from master. · 2ff65553
    Heikki Linnakangas authored
    The xlogreader refactoring broke the logic to decide which timeline to start
    streaming from. XLogPageRead() uses the timeline history to check which
    timeline the requested WAL position falls into. However, after the
    refactoring, XLogPageRead() is always first called with the first page in
    the segment, to verify the segment header, and only then with the actual WAL
    position we're interested in. That first read of the segment's header made
    XLogPageRead() to always start streaming from the old timeline containing
    the segment header, not the timeline containing the actual record, if there
    was a timeline switch within the segment.
    
    I thought I fixed this yesterday, but that fix was too narrow and only fixed
    this for the corner-case that the timeline switch happened in the first page
    of the segment. To fix this more robustly, pass explicitly the position of
    the record we're actually interested in to XLogPageRead, and use that to
    decide which timeline to read from, rather than deduce it from the page and
    offset.
    
    Per report from Fujii Masao.
    2ff65553
xlogreader.c 26.2 KB