From: | Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
---|---|
To: | Peter Geoghegan <pg(at)bowt(dot)ie> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, Kevin Grittner <kgrittn(at)gmail(dot)com>, Jeff Davis <pgsql(at)j-davis(dot)com>, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>, Kyle Kingsbury <aphyr(at)jepsen(dot)io> |
Subject: | Re: Potential G2-item cycles under serializable isolation |
Date: | 2020-06-11 03:16:13 |
Message-ID: | CA+hUKG+Q+ooVj71Ph7w+J9fus-tB2aqHu66s0iotPGPdatJdNQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Thu, Jun 11, 2020 at 1:10 PM Peter Geoghegan <pg(at)bowt(dot)ie> wrote:
> Attached is v3, which has an isolationtester test.
Nice repro. We have:
foo happened before bar, because it can't see bar_insert
bar happened before foo, because it can't see foo_insert (!)
Confirmed here that this anomaly is missed in master and detected with
the patch as shown, and check-world passes.
Explaining it to myself like I'm five:
The tuple foo_insert was concurrently inserted *and* deleted/updated.
Our coding screwed that case up. Your fix teaches the
HEAPTUPLE_DELETE_IN_PROGRESS case to check if it's also an insert we
can't see, and then handles it the same as non-visible HEAPTUPLE_LIVE
or HEAPTUPLE_INSERT_IN_PROGRESS. That is, by taking the xmin
(inserter), not the xmax (updater/deleter) for conflict-out checking.
(As mentioned on IM, I wondered for a bit why it's OK that we now lack
a check for conflict out to the deleter in the insert+delete case, but
I think that's OK because it certainly happened after the insert
committed.)
Then you realised that HEAPTUPLE_RECENTLY_DEAD has no reason to be
treated differently.
Minor nits (already mentioned via IM but FTR): bar_first isn't
necessary in the test, s/foo-insert/foo_insert/
Looks pretty good to me. Tricky problem, really excellent work.
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2020-06-11 05:40:55 | Re: Potential G2-item cycles under serializable isolation |
Previous Message | Kyle Kingsbury | 2020-06-11 03:14:42 | Re: Potential G2-item cycles under serializable isolation |