Re: relfrozenxid may disagree with row XIDs after 1ccc1e05ae

From: Melanie Plageman <melanieplageman(at)gmail(dot)com>
To: Noah Misch <noah(at)leadboat(dot)com>
Cc: Bowen Shi <zxwsbg12138(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, Robert Haas <robertmhaas(at)gmail(dot)com>, Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, Peter Geoghegan <pg(at)bowt(dot)ie>, Alexander Lakhin <exclusion(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: relfrozenxid may disagree with row XIDs after 1ccc1e05ae
Date: 2024-07-08 21:23:52
Message-ID: CAAKRu_b=7e56UNog-Z=N2--bp42r0exckPAPfhruZBVRJHY9nQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Tue, Jun 25, 2024 at 3:37 PM Noah Misch <noah(at)leadboat(dot)com> wrote:
>
> On Thu, Jun 20, 2024 at 11:49:50AM -0400, Melanie Plageman wrote:
> > On Tue, Jun 18, 2024 at 6:51 PM Melanie Plageman <melanieplageman(at)gmail(dot)com> wrote:
> > > I ended up manually backporting the logic from 1ccc1e05ae as opposed
> > > to cherry-picking because it relied on a struct introduced in
> > > 4e9fc3a9762065.
>
> > Attached is the backport and repros for 15 and 16.

I think we are going with the fix proposed for master [1] which
compares dead_after to OldestXmin before using GlobalVisState.
Backporting 1ccc1e05ae doesn't actually fix the problem. We just end
up erroring out when attempting to freeze the tuple we didn't remove.

As such, attached is my proposed fix for affected stable branches. It
is based off of the fix proposed in [1] but is a bit different in each
version due to surrounding code changes.

The test I added passes locally and on linux and windows in CI (on 15+
which have CI). I don't have enough cirrus credits to run the tests on
mac. I am nervous about the test flaking on the buildfarm. But I did
the best I could to try to make it stable. I think keeping it as a
separate commit should be easiest in case we have to revert it?

Thanks to Heikki for backporting BackgroundPsql -- this made my life
much easier!!

- Melanie

[1] https://www.postgresql.org/message-id/CAAKRu_Z4PybtZ0i_NKOr-vbrFW5p1ZdfEfUqaeU8fLPhszpP_g%40mail.gmail.com

Attachment Content-Type Size
REL14_v2-0001-Test-that-vacuum-removes-tuples-older-than-Oldest.patch text/x-patch 9.4 KB
REL15_v2-0002-Ensure-vacuum-removes-all-visibly-dead-tuples-old.patch text/x-patch 6.5 KB
REL14_v2-0002-Ensure-vacuum-removes-all-visibly-dead-tuples-old.patch text/x-patch 6.5 KB
REL15_v2-0001-Test-that-vacuum-removes-tuples-older-than-Oldest.patch text/x-patch 9.4 KB
REL16_v2-0001-Test-that-vacuum-removes-tuples-older-than-Oldest.patch text/x-patch 9.4 KB
REL16_v2-0002-Ensure-vacuum-removes-all-visibly-dead-tuples-old.patch text/x-patch 6.5 KB
REL17_v2-0001-Test-that-vacuum-removes-tuples-older-than-Oldest.patch text/x-patch 10.0 KB
REL17_v2-0002-Ensure-vacuum-removes-all-visibly-dead-tuples-old.patch text/x-patch 5.5 KB

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Masahiko Sawada 2024-07-09 05:29:52 Re: Potential data loss due to race condition during logical replication slot creation
Previous Message Tom Lane 2024-07-08 17:03:28 Re: BUG #18348: Inconsistency with EXTRACT([field] from INTERVAL);