Re: synchronized_standby_slots behavior inconsistent with quorum-based synchronous replication

From: Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>
To: shveta malik <shveta(dot)malik(at)gmail(dot)com>
Cc: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Hou, Zhijie/侯 志杰 <houzj(dot)fnst(at)fujitsu(dot)com>, Ajin Cherian <itsajin(at)gmail(dot)com>, SATYANARAYANA NARLAPURAM <satyanarlapuram(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: synchronized_standby_slots behavior inconsistent with quorum-based synchronous replication
Date: 2026-05-13 11:55:25
Message-ID: CAE9k0Pn1Xr37KDCViQLybd-K8rcY073XgQjKL_H4Ai4AE=POjQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On Wed, Apr 15, 2026 at 12:17 PM shveta malik <shveta(dot)malik(at)gmail(dot)com> wrote:
>
> On Wed, Apr 15, 2026 at 12:00 PM Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com> wrote:
> >
> >
> > On Wed, Apr 15, 2026 at 11:09 AM shveta malik <shveta(dot)malik(at)gmail(dot)com> wrote:
> > >
> > > With this, 'FIRST 1(standby_1, standby_2)' is convered to wait_for_all
> > > mode, which is not correct and it keeps wiating for standby_2 when
> > > standby_1 has already taken changes. I am not sure what is correct way
> > > to deal with it when it comes to first patch alone. My expectation was
> > > that FIRST-syntax is blocked i.e. it errors out instead of partially
> > > implemented and misbehaving. But if we plan to do so, the challenge
> > > will be how to distinguish actual FIRST and comma separated list
> > > implicitly converted to 'FIRST 1' by syncrep parser. For that we will
> > > need either 003 or IsPrioritySyncStandbySlotsSyntax', thus defeating
> > > the whole purpose of separating the patches. What do you think on
> > > this? 001 is okay as is or we shall block FIRST?
> > >
> >
> > AFAICS, we should first finalize the synchronous replication parser
> > changes to give an identity to the plain list mode. Once that is
> > settled, we may need to reorder the patch based on the decision we
> > take. If we decide to proceed with the parser changes, my
> > understanding is that they should come first, followed by the
> > implementation of support for the ANY/FIRST clauses.
>
> I agree. I do not see any other correct way to do it.
>

I've reordered the patches as mentioned here to ensure each patch is
independently functional. The updated sequence is:

1) 0001-Refactor-syncrep-parsing-to-represent-bare-standby-l.patch :
Introduces a new synchronous replication method SYNC_REP_DEFAULT to
represent the bare list form parsed from standby_list. This lets
callers clearly distinguish between three forms:

- Explicit priority syntax — FIRST N (...) or N (...)
- Quorum syntax — ANY N (...)
- Simple list syntax — no FIRST or ANY keyword

2) 0002-Add-ANY-N-semantics-to-synchronized_standby_slots.patch :
Extends synchronized_standby_slots with ANY N quorum semantics.

3) 0003-Add-FIRST-N-and-N-.-priority-syntax-to-synchronized_.patch :
Adds support for FIRST N and N (...) priority syntax to
synchronized_standby_slots

>
> A few trivial comments on 001:
>
> 1)
> +# B) ANY 1 (sb1_slot, sb2_slot) (quorum mode)
> +# - Proceeds when at least N slots have caught up
> +# - Skips missing/invalid/logical slots and lagging slots
> (inactive or active)
> +# to find N caught-up slots
>
> We can mention 'ANY N' instead of 'ANY 1' so that the explanation
> using 'N' makes more sense.
>
> 2)
> +sub poll_query_until_quiet
> +{
> + my ($node, $dbname, $query, $expected, $timeout_secs) = @_;
> +
> + $expected = 't' unless defined($expected);
> + $timeout_secs = $PostgreSQL::Test::Utils::timeout_default
>
> We can get rid of this function now.

Above two comments have been taken care of in the attached patches.

Please take a look and let me know your views.

--
With Regards,
Ashutosh Sharma.

Attachment Content-Type Size
0001-Refactor-syncrep-parsing-to-represent-bare-standby-l.patch application/octet-stream 3.1 KB
0002-Add-ANY-N-semantics-to-synchronized_standby_slots.patch application/octet-stream 39.2 KB
0003-Add-FIRST-N-and-N-.-priority-syntax-to-synchronized_.patch application/octet-stream 19.5 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message wenhui qiu 2026-05-13 11:56:43 Experimental patch for terminating VACUUM freeze blockers
Previous Message Tomas Vondra 2026-05-13 11:54:20 Re: Add a greedy join search algorithm to handle large join problems