pgsql: At promotion, don't leave behind a partial segment on the old ti

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: At promotion, don't leave behind a partial segment on the old ti
Date: 2015-05-22 08:06:18
Message-ID: E1YvhyE-0006YZ-Kd@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

At promotion, don't leave behind a partial segment on the old timeline.

With commit de768844, a copy of the partial segment was archived with the
.partial suffix, but the original file was still left in pg_xlog, so it
didn't actually solve the problems with archiving the partial segment that
it was supposed to solve. With this patch, the partial segment is renamed
rather than copied, so we only archive it with the .partial suffix.

Also be more robust in detecting if the last segment is already being
archived. Previously I used XLogArchiveIsBusy() for that, but that's not
quite right. With archive_mode='always', there might be a .ready file for
it, and we don't want to rename it to .partial in that case.

The old segment is needed until we're fully committed to the new timeline,
i.e. until we've written the end-of-recovery WAL record and updated the
min recovery point and timeline in the control file. So move the renaming
later in the startup sequence, after all that's been done.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/7cbee7c0a1db668c60c020a3fd1e3234daa562a9

Modified Files
--------------
src/backend/access/transam/xlog.c | 138 ++++++++++++++++++------------
src/backend/access/transam/xlogarchive.c | 35 ++++++++
src/include/access/xlog_internal.h | 1 +
3 files changed, 120 insertions(+), 54 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Fujii Masao 2015-05-22 09:35:17 Re: pgsql: At promotion, archive last segment from old timeline with .parti
Previous Message Peter Geoghegan 2015-05-22 00:51:57 Re: Re: [COMMITTERS] pgsql: Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE.