pgsql: Avoid creating archive status ".ready" files too early
От | Alvaro Herrera |
---|---|
Тема | pgsql: Avoid creating archive status ".ready" files too early |
Дата | |
Msg-id | E1mIG1M-0001cm-Hw@gemulon.postgresql.org обсуждение исходный текст |
Список | 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@amazon.com> Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Reviewed-by: Ryo Matsumura <matsumura.ryo@fujitsu.com> Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru> Discussion: https://postgr.es/m/CBDDFA01-6E40-46BB-9F98-9340F4379505@amazon.com Branch ------ REL_14_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/e3fb6170e58c4325cd1e1eb22f96ef43c3b4152a 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(-)
В списке pgsql-committers по дате отправления: