Re: Question about InvalidatePossiblyObsoleteSlot()

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Cc: Masahiko Sawada <sawada.mshk@gmail.com>, Amit Kapila <amit.kapila16@gmail.com>, "suyu.cmj" <mengjuan.cmj@alibaba-inc.com>, "bharath.rupireddyforpostgres" <bharath.rupireddyforpostgres@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-10-30T02:25:18Z
Lists: pgsql-hackers
On Wed, Oct 29, 2025 at 08:55:56AM +0000, Bertrand Drouvot wrote:
> Done that way in v3 attached. Please note that v3 does not take into account
> the XLogRecPtrIsInvalid() remark as this will be part of a global effort and
> it's not directly linked to what we want to achieve here.

This comment related to inactive_since that you have moved to its new
location has been added by ac0e33136abc, for v18~.  Agreed that it is
important to keep that documented.  The new location of this comment
feels OK.

> That's the test instability that triggered 818fefd8fd4 and not any report
> from the field. I think that pre-818fefd8fd4 behavior has been there for a
> while and that hitting the inconsistency is a pathological case. I'd vote for
> do nothing unless we get complaints from the field.

I am not sure that there is anything else to be done, but let's just
revert the change in v16~ for now.  As far as I can see, the change is
straight-forward in v16, slightly funky in v17 as "invalidation_cause"
is a rename of "conflict", while your patch captures the refactoring
of v18~ under DetermineSlotInvalidationCause().  I have run a few
hundred loops of 035_standby_logical_decoding for v16 and v17, in
case, without seeing problems.  Now the original race was also hard to
see.
--
Michael

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix regression with slot invalidation checks

  2. Fix race leading to incorrect conflict cause in InvalidatePossiblyObsoleteSlot()