Re: Introduce XID age and inactive timeout based replication slot invalidation

From: Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>
To: Peter Smith <smithpb2250(at)gmail(dot)com>
Cc: Shlok Kyal <shlok(dot)kyal(dot)oss(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, shveta malik <shveta(dot)malik(at)gmail(dot)com>, Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>, Ajin Cherian <itsajin(at)gmail(dot)com>, Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Nathan Bossart <nathandbossart(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation
Date: 2025-01-27 05:30:15
Message-ID: CABdArM4QFRS6bE-u4m3rrs=C09Nu67S+m2pFXfDvNSJ7-Gaqfg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Jan 22, 2025 at 10:49 AM Nisha Moond <nisha(dot)moond412(at)gmail(dot)com> wrote:
>
> On Tue, Jan 21, 2025 at 8:22 AM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
> >
> > Some review comments for patch v61-0001.
> >
> > ======
> > src/backend/replication/slot.c
> >
> > 2.
> > + /*
> > + * The logical replication slots shouldn't be invalidated as GUC
> > + * max_slot_wal_keep_size is set to -1 during the binary upgrade.
> > + * See check_old_cluster_for_valid_slots() where we ensure that no
> > + * invalidated before the upgrade.
> > + */
> > + Assert(!(*invalidated && SlotIsLogical(s) && IsBinaryUpgrade));
> >
> > 2a.
> > I know this sentence was the same before you moved it, but "ensure
> > that no invalidated" seems like there are some words missing.
> >
>
> Corrected.
>
> > 2b.
> > TBH, I this part confused me (the code is repeated in a couple of
> > places). AFAICT the code/comment does not match quite right. The
> > comment refers to a setting that is "during binary upgrade", yet the
> > Assert can only pass if IsBinaryUpgrade is false. (??)
> >
> > I'm unsure of the intent; perhaps it should be like:
> >
> > if (IsBinaryUpgrade)
> > Assert(!(*invalidated && SlotIsLogical(s)));
> >
>
> This Assert condition is correct, as we don’t want to invalidate slots
> during a binary upgrade and it only triggers(raise error) when all
> three conditions are true, meaning when 'IsBinaryUpgrade' is also
> true.
> That said, I agree with your point that we are unnecessarily checking
> "(*invalidated && SlotIsLogical(s))" even when not in binary upgrade
> mode.
> To optimize this, we can first check 'IsBinaryUpgrade' before
> evaluating the other conditions:
> Assert(!(IsBinaryUpgrade && *invalidated && SlotIsLogical(s)));
> - Since 'IsBinaryUpgrade' is 'false' most of the time, this approach
> short-circuits evaluation, making it more efficient.
>
> However, if you feel that this condition isn’t as clear to read or
> understand, we can separate the 'IsBinaryUpgrade' check outside the
> 'Assert', as you suggested. Let me know what you think!
>

I discussed the above comments further with Peter off-list, and here
are the v63 patches with the following changes:
patch-001: The Assert and related comments have been updated for clarity.
patch-002: Comments have been updated at the top of
InvalidateObsoleteReplicationSlots().

--
Thanks,
Nisha

Attachment Content-Type Size
v63-0001-Enhance-replication-slot-error-handling-slot-inv.patch application/octet-stream 15.8 KB
v63-0002-Introduce-inactive_timeout-based-replication-slo.patch application/octet-stream 33.1 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Ashutosh Bapat 2025-01-27 05:52:09 Re: meson and check-tests
Previous Message Amit Kapila 2025-01-27 05:22:53 Re: Pgoutput not capturing the generated columns