pg_rewind: Skip copy of WAL segments generated before point of divergence
authorMichael Paquier <[email protected]>
Sat, 25 Oct 2025 00:07:31 +0000 (09:07 +0900)
committerMichael Paquier <[email protected]>
Sat, 25 Oct 2025 00:07:31 +0000 (09:07 +0900)
commit5173bfd0443e0c0f3fa37006727d516dc1ba4cee
treedb570500673c70d6608c5bcd806c3a75d52cba21
parent14ee8e6403001c3788f2622cdcf81a8451502dc2
pg_rewind: Skip copy of WAL segments generated before point of divergence

This commit makes the way WAL segments are handled from the source to
the target server slightly smarter: the copy of the WAL segments is now
skipped if these have been created before the point where source and
target have diverged (the WAL segment where the point of divergence
exists is still copied), because we know that such segments exist on
both the target and source.  Note that the on-disk size of the WAL
segments on the source and target need to match.  Hence, only the
segments generated after the point of divergence are now copied.  A
segment existing on the source but not the target is copied.

Previously, all the WAL segments were just copied in full.  This change
can make the rewind operation cheaper in some configurations, especially
for setups where some WAL retention causes many segments to remain on
the source server even after the promotion of a standby used as source
to rewind a previous primary.

A TAP test is added to track these new behaviors.  The file map printed
with --debug now includes all the information related to WAL segments,
to be able to track if these are copied or skipped, and the test relies
on the debug output generated.

Author: John Hsu <[email protected]>
Author: Justin Kwan <[email protected]>
Reviewed-by: Robert Haas <[email protected]>
Reviewed-by: Alexander Korotkov <[email protected]>
Reviewed-by: Japin Li <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Reviewed-by: Srinath Reddy Sadipiralla <[email protected]>
Discussion: https://postgr.es/m/181b4c6fa9c.b8b725681941212.7547232617810891479@viggy28.dev
doc/src/sgml/ref/pg_rewind.sgml
src/bin/pg_rewind/filemap.c
src/bin/pg_rewind/filemap.h
src/bin/pg_rewind/meson.build
src/bin/pg_rewind/pg_rewind.c
src/bin/pg_rewind/t/011_wal_copy.pl [new file with mode: 0644]