Re: Wake up backends immediately when sync standbys decrease

From: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>
To: Shinya Kato <shinya11(dot)kato(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Wake up backends immediately when sync standbys decrease
Date: 2026-01-30 07:49:16
Message-ID: 8C1DDC21-4C4E-45D4-B169-91AD3D5DCB07@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> On Jan 30, 2026, at 14:59, Shinya Kato <shinya11(dot)kato(at)gmail(dot)com> wrote:
>
> Hi hackers,
>
> I have noticed an issue where backends waiting for synchronous
> replication are not woken up immediately when the number of required
> synchronous standbys is reduced in a multiple synchronous standby
> environment.
>
> When synchronous_standby_names is updated to require fewer standbys
> (for example, changing from "FIRST 2 (s1, s2)" to "FIRST 1 (s1)"), the
> backends currently waiting for replication remain blocked even after a
> config reload (SIGHUP). They are only released when a new message
> eventually arrives from a standby, despite the fact that the new
> requirements are already satisfied.
>
> The attached patch adds SyncRepReleaseWaiters() calls within
> walsender.c immediately after the configuration is reloaded and
> SyncRepInitConfig() is called. This ensures that any backends whose
> waiting conditions are now met by the new configuration are released
> without unnecessary delay.
>
> Thoughts?
>
> --
> Best regards,
> Shinya Kato
> NTT OSS Center
> <v1-0001-Wake-up-backends-immediately-when-sync-standbys-d.patch>

Hi Shinya-san,

This patch makes sense to me, and the behavior change looks reasonable.

My main concern is code duplication. The same block is added in three places. While the existing reload handling is already duplicated there, adding more logic on top makes the situation a bit worse from a maintenance perspective.

Would it make sense to factor the reload handling into a small helper, for example:

```
static void
WalSndHandleConfigReload(void)
{
if (!ConfigReloadPending)
return;

ConfigReloadPending = false;
ProcessConfigFile(PGC_SIGHUP);
SyncRepInitConfig();

if (!am_cascading_walsender)
SyncRepReleaseWaiters();
}
```

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Masahiko Sawada 2026-01-30 08:03:49 Re: pg_upgrade: optimize replication slot caught-up check
Previous Message Corey Huinker 2026-01-30 07:29:56 Re: Is there value in having optimizer stats for joins/foreignkeys?