# Test for interactions between SSI's "conflict out" handling for heapam and # concurrently updated tuple # # See bug report: # https://postgr.es/m/db7b729d-0226-d162-a126-8a8ab2dc4443%40jepsen.io setup { CREATE TABLE txn0(id int4 PRIMARY KEY, val TEXT); CREATE TABLE txn1(id int4 PRIMARY KEY, val TEXT); } teardown { DROP TABLE txn0; DROP TABLE txn1; } session foo setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } step foo_select { SELECT * FROM txn0 WHERE id = 42; } step foo_insert { INSERT INTO txn1 SELECT 7, 'foo_insert'; } step foo_commit { COMMIT; } session bar setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } step bar_select { SELECT * FROM txn1 WHERE id = 7; } step bar_insert { INSERT INTO txn0 SELECT 42, 'bar_insert'; } step bar_commit { COMMIT; } # This session creates the conditions that confused bar's "conflict out" # handling in old releases affected by bug: session trouble setup { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; } step trouble_update { UPDATE txn1 SET val = 'add physical version for "bar_select"' WHERE id = 7; } step trouble_delete { DELETE FROM txn1 WHERE id = 7; } step trouble_abort { ABORT; } permutation foo_select bar_insert foo_insert foo_commit trouble_update # Updates tuple... bar_select # Should observe one distinct XID per version bar_commit # "bar" should fail here at the latest trouble_abort # Same as above, but "trouble" session DELETEs this time around permutation foo_select bar_insert foo_insert foo_commit trouble_delete # Deletes tuple... bar_select # Should observe foo's XID bar_commit # "bar" should fail here at the latest trouble_abort