Re: Potential G2-item cycles under serializable isolation
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Kevin Grittner <kgrittn@gmail.com>, Jeff Davis <pgsql@j-davis.com>
Cc: PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>,
Kyle Kingsbury <aphyr@jepsen.io>
Date: 2020-06-09T01:26:01Z
Lists: pgsql-bugs
Attachments
- v2-0001-Avoid-aborted-update-serialization-anomalies.patch (application/octet-stream) patch v2-0001
On Sun, Jun 7, 2020 at 7:54 PM Peter Geoghegan <pg@bowt.ie> wrote: > The issue seems to be that heapam's mechanism for adding a "conflict > out" can get some details subtly wrong. This can happen in the event > of a concurrently updated tuple where the updating xact aborts. So for > each pair of transactions that committed in each G2-Item, there seemed > to be a third updating transaction that aborted, messing things up. I > think that the "conflict out" stuff ought to behave as if an updated > tuple was never updated when it's not visible to our xact anyway. We > should use the XID that created the original tuple for "conflict out" > purposes -- not the (possibly aborted) updater's XID (i.e. not the > HeapTupleHeaderGetUpdateXid() XID). The functionality in question (the code from the HeapCheckForSerializableConflictOut() case statement) was originally discussed here, with the details finalized less than a week before SSI was committed in 2011: https://www.postgresql.org/message-id/flat/1296499247.11513.777.camel%40jdavis#9e407424df5f8794360b6e84de60200a It hasn't really changed since that time. Kevin, Jeff: What do you think of the fix I have proposed? Attached is a revised version, with better comments and a proper commit message. Somebody should review this patch before I proceed with commit. Thanks -- Peter Geoghegan
Commits
-
Doc: Add references for SI and SSI.
- 4c897197d793 9.5.23 landed
- 7295ac9c6c71 9.6.19 landed
- e2aca0d02d97 10.14 landed
- 648e56d3984d 11.9 landed
- eb1286413c0a 12.4 landed
- 4701efa9f741 13.0 landed
- 1575fbf1ac3c 14.0 landed
-
Improve comments for [Heap]CheckForSerializableConflictOut().
- 44eff2841059 13.0 landed
- 7aa4fb592530 14.0 landed
-
Avoid update conflict out serialization anomalies.
- 5940ffb22131 14.0 landed
- 6df7105e5d50 13.0 landed
- e620a38c23b9 12.4 landed
- dd616f2ec1c5 11.9 landed
- 19a6e1bc3083 10.14 landed
- e81dc2b7e2c4 9.6.19 landed
- c05f6b354ffe 9.5.23 landed
-
Implement genuine serializable isolation level.
- dafaa3efb75c 9.1.0 cited