Fix WAL summary boundary checks for incremental backups. A standby can summarize received WAL ahead of replay. If recovery ends exactly where an old-timeline summary begins, FilterWalSummaries() incorrectly includes that summary even though it covers only WAL outside the promoted server's history. Truncation information in the summary can cause an incremental backup to omit modified blocks, leading pg_combinebackup to reconstruct files with stale data from an earlier backup. For example, updated rows can revert to their previous values after restoring the backup.
Fix this by excluding summaries that only touch the boundaries of the requested LSN range without overlapping it. This makes FilterWalSummaries() consistent with GetWalSummaries() and its existing function comments. The old-timeline summary starting at the switch point is thus excluded, preventing its truncation information from causing the backup to omit required modified blocks. Back-patch to PostgreSQL 17, where incremental backup was introduced. Author: Ayush Tiwari <[email protected]> Reviewed-by: Chao Li <[email protected]> Reviewed-by: Manu <[email protected]> Reviewed-by: Fujii Masao <[email protected]> Reviewed-by: shihao zhong <[email protected]> Discussion: https://postgr.es/m/CAJTYsWV7RThdo4K62G8hC=anpkbr54qwbovyvvw5uvx4+-x...@mail.gmail.com Backpatch-through: 17 Branch ------ REL_17_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/ec756e5913b8d890fab435a0ca5b7d24a60306b8 Modified Files -------------- src/backend/backup/walsummary.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
