diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-09-04 12:40:28 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-09-04 12:40:28 -0400 |
commit | d54f99e41541de848a6ca53b3ec060f461e9ab71 (patch) | |
tree | 0aef94aa143f7d223af954f69a02b2660c04ee72 | |
parent | 49d7165117893405ae9b5b8d8e7877acff33c0e7 (diff) | |
download | postgresql-d54f99e41541de848a6ca53b3ec060f461e9ab71.tar.gz postgresql-d54f99e41541de848a6ca53b3ec060f461e9ab71.zip |
Fix rare deadlock failure in create_am regression test.
The "DROP ACCESS METHOD gist2" test will require locking the index
to be dropped and then its table; while most ordinary operations
lock a table first then its index. While no concurrent test scripts
should be touching fast_emp4000, autovacuum might chance to be
processing that table when the DROP runs, resulting in a deadlock
failure. This is pretty rare but we see it in the buildfarm from
time to time.
To fix, acquire a lock on fast_emp4000 before issuing the DROP.
Since the point of the exercise is mostly to prevent buildfarm
failures, back-patch to 9.6 where this test was introduced.
Discussion: https://postgr.es/m/839004.1599185607@sss.pgh.pa.us
-rw-r--r-- | src/test/regress/expected/create_am.out | 5 | ||||
-rw-r--r-- | src/test/regress/sql/create_am.sql | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/test/regress/expected/create_am.out b/src/test/regress/expected/create_am.out index 84da403afc5..b9dc82dd3c3 100644 --- a/src/test/regress/expected/create_am.out +++ b/src/test/regress/expected/create_am.out @@ -102,8 +102,13 @@ ERROR: cannot drop access method gist2 because other objects depend on it DETAIL: index grect2ind2 depends on operator class box_ops for access method gist2 HINT: Use DROP ... CASCADE to drop the dependent objects too. -- Drop access method cascade +-- To prevent a (rare) deadlock against autovacuum, +-- we must lock the table that owns the index that will be dropped +BEGIN; +LOCK TABLE fast_emp4000; DROP ACCESS METHOD gist2 CASCADE; NOTICE: drop cascades to index grect2ind2 +COMMIT; -- -- Test table access methods -- diff --git a/src/test/regress/sql/create_am.sql b/src/test/regress/sql/create_am.sql index a7f6de7e9be..97df244d172 100644 --- a/src/test/regress/sql/create_am.sql +++ b/src/test/regress/sql/create_am.sql @@ -70,7 +70,12 @@ ROLLBACK; DROP ACCESS METHOD gist2; -- Drop access method cascade +-- To prevent a (rare) deadlock against autovacuum, +-- we must lock the table that owns the index that will be dropped +BEGIN; +LOCK TABLE fast_emp4000; DROP ACCESS METHOD gist2 CASCADE; +COMMIT; -- |