• Heikki Linnakangas's avatar
    Tolerate timeline switches while "pg_basebackup -X fetch" is running. · b0daba57
    Heikki Linnakangas authored
    If you take a base backup from a standby server with "pg_basebackup -X
    fetch", and the timeline switches while the backup is being taken, the
    backup used to fail with an error "requested WAL segment %s has already
    been removed". This is because the server-side code that sends over the
    required WAL files would not construct the WAL filename with the correct
    timeline after a switch.
    
    Fix that by using readdir() to scan pg_xlog for all the WAL segments in the
    range, regardless of timeline.
    
    Also, include all timeline history files in the backup, if taken with
    "-X fetch". That fixes another related bug: If a timeline switch happened
    just before the backup was initiated in a standby, the WAL segment
    containing the initial checkpoint record contains WAL from the older
    timeline too. Recovery will not accept that without a timeline history file
    that lists the older timeline.
    
    Backpatch to 9.2. Versions prior to that were not affected as you could not
    take a base backup from a standby before 9.2.
    b0daba57
xlog.c 303 KB