Re: Synchronizing slots from primary to standby

From: shveta malik <shveta(dot)malik(at)gmail(dot)com>
To: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Cc: "Drouvot, Bertrand" <bertranddrouvot(dot)pg(at)gmail(dot)com>, Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com>, Bruce Momjian <bruce(at)momjian(dot)us>, Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Ajin Cherian <itsajin(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, shveta malik <shveta(dot)malik(at)gmail(dot)com>
Subject: Re: Synchronizing slots from primary to standby
Date: 2023-09-08 08:24:43
Message-ID: CAJpy0uCgDnzuR5Su625-uFYveGXCu6NXcz-bSXgZ3fWkPYU=pw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Sep 7, 2023 at 8:29 AM shveta malik <shveta(dot)malik(at)gmail(dot)com> wrote:
>
> On Fri, Aug 25, 2023 at 2:15 PM Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> >
> > Wait a minute ...
> >
> > From bac0fbef8b203c530e5117b0b7cfee13cfab78b9 Mon Sep 17 00:00:00 2001
> > From: Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>
> > Date: Sat, 22 Jul 2023 10:17:48 +0000
> > Subject: [PATCH v13 1/2] Allow logical walsenders to wait for physical
> > standbys
> >
> > @@ -2498,6 +2500,13 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, ReorderBufferTXN *txn,
> > }
> > else
> > {
> > + /*
> > + * Before we send out the last set of changes to logical decoding
> > + * output plugin, wait for specified streaming replication standby
> > + * servers (if any) to confirm receipt of WAL upto commit_lsn.
> > + */
> > + WaitForStandbyLSN(commit_lsn);
> >
> > OK, so we call this new function frequently enough -- once per
> > transaction, if I read this correctly? So ...
> >
> > +void
> > +WaitForStandbyLSN(XLogRecPtr wait_for_lsn)
> > +{
> > ...
> >
> > + /* "*" means all logical walsenders should wait for physical standbys. */
> > + if (strcmp(synchronize_slot_names, "*") != 0)
> > + {
> > + bool shouldwait = false;
> > +
> > + rawname = pstrdup(synchronize_slot_names);
> > + SplitIdentifierString(rawname, ',', &elemlist);
> > +
> > + foreach (l, elemlist)
> > + {
> > + char *name = lfirst(l);
> > + if (strcmp(name, NameStr(MyReplicationSlot->data.name)) == 0)
> > + {
> > + shouldwait = true;
> > + break;
> > + }
> > + }
> > +
> > + pfree(rawname);
> > + rawname = NULL;
> > + list_free(elemlist);
> > + elemlist = NIL;
> > +
> > + if (!shouldwait)
> > + return;
> > + }
> > +
> > + rawname = pstrdup(standby_slot_names);
> > + SplitIdentifierString(rawname, ',', &elemlist);
> >
> > ... do we really want to be doing the GUC string parsing every time
> > through it? This sounds like it could be a bottleneck, or at least slow
> > things down. Maybe we should think about caching this somehow.
> >
>
> Yes, these parsed lists are now cached. Please see v15
> (https://www.postgresql.org/message-id/CAJpy0uAuzbzvcjpnzFTiWuDBctnH-SDZC6AZabPX65x9GWBrjQ%40mail.gmail.com)
>
> thanks
> Shveta

Patches (v15) were no longer applying to HEAD, rebased those and
addressed below along-with:

1) Fixed an issue in slots-invalidation code-path on standby. Thanks
Ajin for testing the patch and finding the issue.
2) Ensure that WAL is replayed on standby before moving the slot's
position to the target location received from the primary.
3) Some code restructuring in slotsync.c

thanks
Shveta

Attachment Content-Type Size
v16-0002-Add-logical-slot-sync-capability-to-physical-sta.patch application/octet-stream 86.2 KB
v16-0001-Allow-logical-walsenders-to-wait-for-physical-st.patch application/octet-stream 23.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Zhijie Hou (Fujitsu) 2023-09-08 08:42:04 RE: [PoC] pg_upgrade: allow to upgrade publisher node
Previous Message Daniel Gustafsson 2023-09-08 08:05:11 Re: Build the docs if there are changes in docs and don't run other tasks if the changes are only in docs