pgsql: Fix remote_apply waits with wal_receiver_status_interval set to - Mailing list pgsql-committers

From Fujii Masao
Subject pgsql: Fix remote_apply waits with wal_receiver_status_interval set to
Date
Msg-id E1xEOdb-00000000frs-0HX4@gemulon.postgresql.org
Whole thread
List pgsql-committers
Fix remote_apply waits with wal_receiver_status_interval set to zero

With synchronous_commit = remote_apply, a commit could remain blocked even
after the synchronous standby had applied it when
wal_receiver_status_interval was set to zero. With both
wal_sender_timeout and wal_receiver_timeout disabled, the wait could last
indefinitely.

Commit 400a790a48e introduced this regression while avoiding unnecessary
duplicate standby status replies. It changed apply notifications from forced
replies to replies that check for WAL position changes. However,
XLogWalRcvSendReply() still returned early for non-forced replies when
wal_receiver_status_interval was zero, before checking the apply position.

Fix this by allowing apply-notification requests to bypass the early return
while preserving the existing checks that suppress unnecessary duplicate
replies.

Author: Vaibhav Dalvi <vaibhav.dalvi@enterprisedb.com>
Reviewed-by: Ashutosh Sharma <ashu.coek88@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CA+vB=AHKUhc9GCDwoLr=SshTBCQG09kp8TEXew50UtD5rYqowg@mail.gmail.com
Backpatch-through: 19

Branch
------
master

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

Modified Files
--------------
src/backend/replication/walreceiver.c              | 11 ++--
src/test/recovery/meson.build                      |  1 +
.../recovery/t/059_remote_apply_status_interval.pl | 68 ++++++++++++++++++++++
3 files changed, 75 insertions(+), 5 deletions(-)


pgsql-committers by date:

Previous
From: Álvaro Herrera
Date:
Subject: pgsql: Concurrent REPACK: Clear out dropped-column values from all tupl
Next
From: Fujii Masao
Date:
Subject: pgsql: Fix remote_apply waits with wal_receiver_status_interval set to