Remove unnecessary dependency on statement_timeout in prepared_xacts test.

Rather than waiting around for statement_timeout to expire, we can just
try to take the table's lock in nowait mode.  This saves some fraction
under 4 seconds when running this test with prepared xacts available,
and it guards against timeout-expired-anyway failures on very slow
machines when prepared xacts are not available, as seen in a recent
failure on axolotl for instance.

This approach could fail if autovacuum were to take an exclusive lock
on the test table concurrently, but there's no reason for it to do so.

Since the main point here is to improve stability in the buildfarm,
back-patch to all supported branches.
This commit is contained in:
Tom Lane 2017-03-13 16:46:32 -04:00
parent 9ca5c8721d
commit 1c7a66a8e9
3 changed files with 8 additions and 22 deletions

View File

@ -195,9 +195,8 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
ERROR: canceling statement due to statement timeout
lock table pxtest3 in access share mode nowait;
ERROR: could not obtain lock on relation "pxtest3"
rollback;
-- Disconnect, we will continue testing in a different backend
\c -
@ -211,9 +210,8 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should still be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
ERROR: canceling statement due to statement timeout
lock table pxtest3 in access share mode nowait;
ERROR: could not obtain lock on relation "pxtest3"
rollback;
-- Commit table creation
COMMIT PREPARED 'regress-one';

View File

@ -199,12 +199,7 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
fff
-----
(0 rows)
lock table pxtest3 in access share mode nowait;
rollback;
-- Disconnect, we will continue testing in a different backend
\c -
@ -216,12 +211,7 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should still be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
fff
-----
(0 rows)
lock table pxtest3 in access share mode nowait;
rollback;
-- Commit table creation
COMMIT PREPARED 'regress-one';

View File

@ -123,8 +123,7 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
lock table pxtest3 in access share mode nowait;
rollback;
-- Disconnect, we will continue testing in a different backend
@ -135,8 +134,7 @@ SELECT gid FROM pg_prepared_xacts;
-- pxtest3 should still be locked because of the pending DROP
begin;
set statement_timeout to 2000;
SELECT * FROM pxtest3;
lock table pxtest3 in access share mode nowait;
rollback;
-- Commit table creation