pgsql: Fix two timeline handling bugs in pg_receivexlog.

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix two timeline handling bugs in pg_receivexlog.
Date: 2013-09-23 07:41:22
Message-ID: E1VO0ln-0001sb-00@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix two timeline handling bugs in pg_receivexlog.

When a timeline history file is fetched from server, it is initially created
with a temporary file name, and renamed to place. However, the temporary
file name was constructed using an uninitialized buffer. Usually that meant
that the file was created in current directory instead of the target, which
usually goes unnoticed, but if the target is on a different filesystem than
the current dir, the rename() would fail. Fix that.

The second issue is that pg_receivexlog would not take .partial files into
account when determining when scanning the target directory for existing
WAL files. If the timeline has switched in the server several times in the
last WAL segment, and pg_receivexlog is restarted, it would choose a too
old starting point. That's not a problem as long as the old WAL segment
exists in the server and can be streamed over, but will cause a failure if
it's not.

Backpatch to 9.3, where this timeline handling code was written.

Analysed by Andrew Gierth, bug #8453, based on a bug report on IRC.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/b882246e3ab4382b3c9f58e5f85dd8c9e3eb594f

Modified Files
--------------
src/bin/pg_basebackup/pg_receivexlog.c | 74 +++++++++++++++++++++-----------
src/bin/pg_basebackup/receivelog.c | 7 ++-
2 files changed, 52 insertions(+), 29 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Heikki Linnakangas 2013-09-23 07:41:23 pgsql: Fix two timeline handling bugs in pg_receivexlog.
Previous Message Alvaro Herrera 2013-09-20 21:18:05 Re: SSL renegotiation