Re: FOR KEY LOCK foreign keys - Mailing list pgsql-hackers

From Jesper Krogh
Subject Re: FOR KEY LOCK foreign keys
Date
Msg-id 4DFE2431.9080804@krogh.cc
Whole thread Raw
In response to Re: FOR KEY LOCK foreign keys  (Noah Misch <noah@leadboat.com>)
Responses Re: FOR KEY LOCK foreign keys
List pgsql-hackers
I hope this hasn't been forgotten. But I cant see it has been committed 
or moved
into the commitfest process?

Jesper


On 2011-03-11 16:51, Noah Misch wrote:
> On Fri, Feb 11, 2011 at 02:13:22AM -0500, Noah Misch wrote:
>> Automated tests would go a long way toward building confidence that this patch
>> does the right thing.  Thanks to the SSI patch, we now have an in-tree test
>> framework for testing interleaved transactions.  The only thing it needs to be
>> suitable for this work is a way to handle blocked commands.  If you like, I can
>> try to whip something up for that.
> [off-list ACK followed]
>
> Here's a patch implementing that.  It applies to master, with or without your
> KEY LOCK patch also applied, though the expected outputs reflect the
> improvements from your patch.  I add three isolation test specs:
>
>    fk-contention: blocking-only test case from your blog post
>    fk-deadlock: the deadlocking test case I used during patch review
>    fk-deadlock2: Joel Jacobson's deadlocking test case
>
> When a spec permutation would have us run a command in a currently-blocked
> session, we cannot implement that permutation.  Such permutations represent
> impossible real-world scenarios, anyway.  For now, I just explicitly name the
> valid permutations in each spec file.  If the test harness detects this problem,
> we abort the current test spec.  It might be nicer to instead cancel all
> outstanding queries, issue rollbacks in all sessions, and continue with other
> permutations.  I hesitated to do that, because we currently leave all
> transaction control in the hands of the test spec.
>
> I only support one waiting command at a time.  As long as one commands continues
> to wait, I run other commands to completion synchronously.  This decision has no
> impact on the current test specs, which all have two sessions.  It avoided a
> touchy policy decision concerning deadlock detection.  If two commands have
> blocked, it may be that a third command needs to run before they will unblock,
> or it may be that the two commands have formed a deadlock.  We won't know for
> sure until deadlock_timeout elapses.  If it's possible to run the next step in
> the permutation (i.e., it uses a different session from any blocked command), we
> can either do so immediately or wait out the deadlock_timeout first.  The latter
> slows the test suite, but it makes the output more natural -- more like what one
> would typically after running the commands by hand.  If anyone can think of a
> sound general policy, that would be helpful.  For now, I've punted.
>
> With a default postgresql.conf, deadlock_timeout constitutes most of the run
> time.  Reduce it to 20ms to accelerate things when running the tests repeatedly.
>
> Since timing dictates which query participating in a deadlock will be chosen for
> cancellation, the expected outputs bearing deadlock errors are unstable.  I'm
> not sure how much it will come up in practice, so I have not included expected
> output variations to address this.
>
> I think this will work on Windows as well as pgbench does, but I haven't
> verified that.
>
> Sorry for the delay on this.
>


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Hugetables question
Next
From: Andrew Chernow
Date:
Subject: Re: Libpq enhancement