| 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 |
| 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 |