pgsql: Fix WAL flush LSN used by logical walsender during shutdown - Mailing list pgsql-committers

From Fujii Masao
Subject pgsql: Fix WAL flush LSN used by logical walsender during shutdown
Date
Msg-id E1w2H7a-00053o-0P@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix WAL flush LSN used by logical walsender during shutdown

Commit 6eedb2a5fd8 made the logical walsender call
XLogFlush(GetXLogInsertRecPtr()) to ensure that all pending WAL is flushed,
fixing a publisher shutdown hang. However, if the last WAL record ends at
a page boundary, GetXLogInsertRecPtr() can return an LSN pointing past
the page header, which can cause XLogFlush() to report an error.

A similar issue previously existed in the GiST code. Commit b1f14c96720
introduced GetXLogInsertEndRecPtr(), which returns a safe WAL insertion end
location (returning the start of the page when the last record ends at a page
boundary), and updated the GiST code to use it with XLogFlush().

This commit fixes the issue by making the logical walsender use
XLogFlush(GetXLogInsertEndRecPtr()) when flushing pending WAL during shutdown.

Backpatch to all supported versions.

Reported-by: Andres Freund <andres@anarazel.de>
Author: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/vzguaguldbcyfbyuq76qj7hx5qdr5kmh67gqkncyb2yhsygrdt@dfhcpteqifux
Backpatch-through: 14

Branch
------
master

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

Modified Files
--------------
src/backend/replication/walsender.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: David Rowley
Date:
Subject: Re: pgsql: Add pg_plan_advice contrib module.
Next
From: Fujii Masao
Date:
Subject: pgsql: Fix WAL flush LSN used by logical walsender during shutdown