From: | Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Tolerate timeline switches while "pg_basebackup -X fetch" is run |
Date: | 2013-01-03 18:01:41 |
Message-ID: | E1Tqp6r-00025d-FT@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
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(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2013-01-03 23:35:11 | pgsql: Prevent creation of postmaster's TCP socket during pg_upgrade te |
Previous Message | Bruce Momjian | 2013-01-03 02:20:54 | pgsql: Adjust a few pg_upgrade functions to return void. |