• Michael Paquier's avatar
    Fix WAL recycling on standbys depending on archive_mode · 78ea8b5d
    Michael Paquier authored
    A restart point or a checkpoint recycling WAL segments treats segments
    marked with neither ".done" (archiving is done) or ".ready" (segment is
    ready to be archived) in archive_status the same way for archive_mode
    being "on" or "always".  While for a primary this is fine, a standby
    running a restart point with archive_mode = on would try to mark such a
    segment as ready for archiving, which is something that will never
    happen except after the standby is promoted.
    
    Note that this problem applies only to WAL segments coming from the
    local pg_wal the first time archive recovery is run.  Segments part of a
    self-contained base backup are the most common case where this could
    happen, however even in this case normally the .done markers would be
    most likely part of the backup.  Segments recovered from an archive are
    marked as .ready or .done by the startup process, and segments finished
    streaming are marked as such by the WAL receiver, so they are handled
    already.
    
    Reported-by: Haruka Takatsuka
    Author: Michael Paquier
    Discussion: https://postgr.es/m/15402-a453c90ed4cf88b2@postgresql.org
    Backpatch-through: 9.5, where archive_mode = always has been added.
    78ea8b5d
xlogarchive.c 22.1 KB