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

From: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
To: Peter Smith <smithpb2250(at)gmail(dot)com>
Cc: Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, Shlok Kyal <shlok(dot)kyal(dot)oss(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-02-10 09:45:07
Message-ID: CAA4eK1Kup3+xdh1EMeNE3T6o2PiG6z=V8a1HPvY_qG2dnEb8Ng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Feb 10, 2025 at 11:33 AM Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
>
> Some review comments for v72-0001.
>
> ======
> GENERAL
>
> My preference was to just keep the enum as per v70 for the *actual*
> cause, and introduce a separate set of bit flags for *possible* causes
> to be checked. This creates a clear code separation between the actual
> and possible. It also eliminates the need to jump through hoops just
> to map a cause to its name.
>
> You wrote:
>
> > OTOH, keeping the enums as they are in v70, and defining new macros
> for the very similar purpose could add unnecessary complexity to code
> management.
>
> Since both the enum and the bit flags would be defined in slot.h
> adjacent to each other I don't foresee much complexity. I concede, a
> dev might write code and accidentally muddle the enum instead of the
> flag or vice versa but that's an example of sloppiness, not
> complexity. Certainly there would be fewer necessary changes than what
> are in the v72 patch due to all the cause/causename mappings. For
> example,
>
> slot.h - Now, introduces a NEW typedef SlotInvalidationCauseMap
> slot.h - Now, need extern for NEW function GetSlotInvalidationCauseName
>
> slot.c - Now, needed minor rewrite of GetSlotInvalidationCause instead
> of leaving it as-is
> slot.c - Now, needs a whole NEW looping function
> GetSlotInvalidationCauseName instead of direct array index.
>
> Several place now must call to the GetSlotInvalidationCauseName where
> previously a simple direct array lookup was done
> slot.c - NEW call in ReplicationSlotAcquire
> slotfuncs.c - NEW call in pg_get_replication_slots
>
> ~
>
> FWIW, I've attached a topup patch using my idea just to see what it
> might look like. The result was 20 lines less code.
>

I don't like the idea of maintaining the same information in two
different ways (as enum and bit flags). We already have a few cases of
defining bit flags as part of enums like ScanOptions and relopt_kind,
so I feel following that model would be a better approach.

--
With Regards,
Amit Kapila.

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Zhijie Hou (Fujitsu) 2025-02-10 09:56:49 RE: Introduce XID age and inactive timeout based replication slot invalidation
Previous Message Tomas Vondra 2025-02-10 09:35:31 Re: should we have a fast-path planning for OLTP starjoins?