Thread: pgsql: Tolerate timeline switches while "pg_basebackup -X fetch" is run
pgsql: Tolerate timeline switches while "pg_basebackup -X fetch" is run
From
Heikki Linnakangas
Date:
Tolerate timeline switches while "pg_basebackup -X fetch" is running. 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. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/b0daba57bb50ca8bfb9d3ec886c5f86f7b3c006b Modified Files -------------- src/backend/access/transam/xlog.c | 23 +++- src/backend/replication/basebackup.c | 231 ++++++++++++++++++++++++++++------ src/backend/replication/walsender.c | 8 +- src/include/access/xlog.h | 2 +- 4 files changed, 211 insertions(+), 53 deletions(-)