Re: Potential G2-item cycles under serializable isolation

Thomas Munro <thomas.munro@gmail.com>

From: Thomas Munro <thomas.munro@gmail.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Kevin Grittner <kgrittn@gmail.com>, Jeff Davis <pgsql@j-davis.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>, Kyle Kingsbury <aphyr@jepsen.io>
Date: 2020-06-09T02:54:51Z
Lists: pgsql-bugs
On Tue, Jun 9, 2020 at 2:12 PM Peter Geoghegan <pg@bowt.ie> wrote:
> Also, is it necessary to have the TransactionIdEquals() tests in both
> HeapCheckForSerializableConflictOut() and
> CheckForSerializableConflictOut()? Apart from anything else, the test
> in HeapCheckForSerializableConflictOut() occurs before we establish
> the topmost XID -- it could be a subxid, in which case the test is
> wrong. Though it doesn't actually matter on account of the redundancy,
> IIUC.

The double-check was present in the original commit dafaa3efb75.  It
seems like a pretty straightforward optimisation:
SubTransGetTopmostTransaction(xid) might cause I/O so it's worth the
check if you can already bail out sooner.  Admittedly the recent
splitting of that function made that a bit less clear.



Commits

  1. Doc: Add references for SI and SSI.

  2. Improve comments for [Heap]CheckForSerializableConflictOut().

  3. Avoid update conflict out serialization anomalies.

  4. Implement genuine serializable isolation level.