Remove unnecessary dependency on statement_timeout in prepared_xacts test.
authorTom Lane <[email protected]>
Mon, 13 Mar 2017 20:46:32 +0000 (16:46 -0400)
committerTom Lane <[email protected]>
Mon, 13 Mar 2017 20:46:32 +0000 (16:46 -0400)
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.

src/test/regress/expected/prepared_xacts.out
src/test/regress/expected/prepared_xacts_1.out
src/test/regress/sql/prepared_xacts.sql

index 3a2c533f789d7cf910009915107b20c0a350d81c..eb77c18788e35ebf61e31183cbeb3e2b36780c30 100644 (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';
index 5078bf6ba987785a21ca4631c83b3c292b253c0f..0857d259e07c3601898c6e4bcc55061590affe09 100644 (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';
index dfb20a18e7c972367e82e33536c3a2e988cb7788..d8249a27dc2dc224bcfb432142b18236c0a93192 100644 (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