Re: Adding a test for speculative insert abort case

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Melanie Plageman <melanieplageman@gmail.com>
Cc: Pg Hackers <pgsql-hackers@postgresql.org>, Peter Geoghegan <pg@bowt.ie>
Date: 2019-05-10T21:40:38Z
Lists: pgsql-hackers

Attachments

Hi,

On 2019-05-01 11:41:48 -0700, Andres Freund wrote:
> I'm imagining something like
> 
> if (pg_try_advisory_xact_lock(1))
>     pg_advisory_xact_lock(2);
> else
>     pg_advisory_xact_lock(1);
> 
> in t1_lock_func. If you then make the session something roughly like
> 
> s1: pg_advisory_xact_lock(1);
> s1: pg_advisory_xact_lock(2);
> 
> s2: upsert t1 <blocking for 1>
> s1: pg_advisory_xact_unlock(1);
> s2: <continuing>
> s2: <blocking for 2>
> s1: insert into t1 values(1, 'someval');
> s1: pg_advisory_xact_unlock(2);
> s2: <continuing>
> s2: spec-conflict

Needed to be slightly more complicated than that, but not that much. See
the attached test.  What do you think?

I think we should apply something like this (minus the WARNING, of
course). It's a bit complicated, but it seems worth covering this
special case.

Greetings,

Andres Freund

Commits

  1. Test additional speculative conflict scenarios.

  2. Add isolation test for INSERT ON CONFLICT speculative insertion failure.