• Heikki Linnakangas's avatar
    Fix scenario where streaming standby gets stuck at a continuation record. · 06687198
    Heikki Linnakangas authored
    If a continuation record is split so that its first half has already been
    removed from the master, and is only present in pg_wal, and there is a
    recycled WAL segment in the standby server that looks like it would
    contain the second half, recovery would get stuck. The code in
    XLogPageRead() incorrectly started streaming at the beginning of the
    WAL record, even if we had already read the first page.
    
    Backpatch to 9.4. In principle, older versions have the same problem, but
    without replication slots, there was no straightforward mechanism to
    prevent the master from recycling old WAL that was still needed by standby.
    Without such a mechanism, I think it's reasonable to assume that there's
    enough slack in how many old segments are kept around to not run into this,
    or you have a WAL archive.
    
    Reported by Jonathon Nelson. Analysis and patch by Kyotaro HORIGUCHI, with
    some extra comments by me.
    
    Discussion: https://www.postgresql.org/message-id/CACJqAM3xVz0JY1XFDKPP%2BJoJAjoGx%3DGNuOAshEDWCext7BFvCQ%40mail.gmail.com
    06687198
xlog.c 383 KB