pgsql: Avoid creating archive status ".ready" files too early

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Avoid creating archive status ".ready" files too early
Date: 2021-08-23 19:54:12
Message-ID: E1mIG1M-0001cv-JE@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Avoid creating archive status ".ready" files too early

WAL records may span multiple segments, but XLogWrite() does not
wait for the entire record to be written out to disk before
creating archive status files. Instead, as soon as the last WAL page of
the segment is written, the archive status file is created, and the
archiver may process it. If PostgreSQL crashes before it is able to
write and flush the rest of the record (in the next WAL segment), the
wrong version of the first segment file lingers in the archive, which
causes operations such as point-in-time restores to fail.

To fix this, keep track of records that span across segments and ensure
that segments are only marked ready-for-archival once such records have
been completely written to disk.

This has always been wrong, so backpatch all the way back.

Author: Nathan Bossart <bossartn(at)amazon(dot)com>
Reviewed-by: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
Reviewed-by: Ryo Matsumura <matsumura(dot)ryo(at)fujitsu(dot)com>
Reviewed-by: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>
Discussion: https://postgr.es/m/CBDDFA01-6E40-46BB-9F98-9340F4379505@amazon.com

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/cf69f7109cd8bd5908c2c23190e39ec3d69be309

Modified Files
--------------
src/backend/access/transam/xlog.c | 216 +++++++++++++++++++++++++++++++++++--
src/backend/postmaster/walwriter.c | 7 ++
src/include/access/xlog.h | 1 +
src/include/access/xlogdefs.h | 1 +
4 files changed, 215 insertions(+), 10 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2021-08-23 21:41:33 pgsql: Prevent regexp back-refs from sometimes matching when they shoul
Previous Message Bruce Momjian 2021-08-23 16:34:08 pgsql: Improve defaults shown in postgresql.conf.sample and pg_settings