Previously, the speculative insert tests did not cover the case when a tuple t is inserted into a table with a unique index on a column but before it can insert into the index, a concurrent transaction has inserted a conflicting value into the index and the insertion of tuple t must be aborted.
The basic permutation is one session successfully inserts into the table and an associated unique index while a concurrent session successfully inserts into the table but discovers a conflict before inserting into the index and must abort the insertion.
Several variants on this include:- swap which session is successful- first session insert transaction does not commit, so second session must wait on a transaction lock- first session insert does not "complete", so second session must wait on a speculative insertion lock
Also, refactor the existing TOAST table upsert test to be in the same spec and reuse the steps.
Author: Melanie Plageman, Ashwin Agrawal, Andres Freund
43e0841970 Test additional speculative conflict scenarios.
.../expected/insert-conflict-specconflict.out | 277 +++++++++++++++++----
.../isolation/expected/insert-conflict-toast.out | 15 --
src/test/isolation/isolation_schedule | 1 -
.../specs/insert-conflict-specconflict.spec | 140 +++++++++--
.../isolation/specs/insert-conflict-toast.spec | 51 ----
5 files changed, 356 insertions(+), 128 deletions(-)