diff options
author | Michael Paquier | 2024-04-10 04:48:13 +0000 |
---|---|---|
committer | Michael Paquier | 2024-04-10 04:48:13 +0000 |
commit | 5105c90796811f62711538155d207e5311eacf9b (patch) | |
tree | 6624783c2d2ffeb66be724d7a13d9a927807a784 | |
parent | 7e85d1c75f299b0772fbeb145706e019629530bd (diff) |
Make GIN tests using injection points concurrent-safe
f587338dec87 has introduced in the test module injection_points a SQL
function called injection_points_set_local(), that can be used to make
all the injection points linked to the process where they are attached,
discarded automatically if any remain once the process exits.
e2e3b8ae9ed7 has added a NO_INSTALLCHECK to the test module to prevent
the use of installcheck. Now that there is a way to make the test
concurrent-safe, let's use it and remove the installcheck restriction.
Concurrency issues could be easily reproduced by running in a tight
loop a command like this one, in src/test/modules/gin/ (hardcoding
pg_sleep() after attaching injection points enlarges the race window)
and a second test suite like contrib/btree_gin/:
make installcheck USE_MODULE_DB=1
Reviewed-by: Andrey Borodin
Discussion: https://postgr.es/m/[email protected]
-rw-r--r-- | src/test/modules/gin/Makefile | 3 | ||||
-rw-r--r-- | src/test/modules/gin/expected/gin_incomplete_splits.out | 7 | ||||
-rw-r--r-- | src/test/modules/gin/meson.build | 2 | ||||
-rw-r--r-- | src/test/modules/gin/sql/gin_incomplete_splits.sql | 3 |
4 files changed, 10 insertions, 5 deletions
diff --git a/src/test/modules/gin/Makefile b/src/test/modules/gin/Makefile index da4c9cea5ef..e007e38ac27 100644 --- a/src/test/modules/gin/Makefile +++ b/src/test/modules/gin/Makefile @@ -4,9 +4,6 @@ EXTRA_INSTALL = src/test/modules/injection_points REGRESS = gin_incomplete_splits -# The injection points are cluster-wide, so disable installcheck -NO_INSTALLCHECK = 1 - ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/src/test/modules/gin/expected/gin_incomplete_splits.out b/src/test/modules/gin/expected/gin_incomplete_splits.out index 973a8ce6c84..15574e547ac 100644 --- a/src/test/modules/gin/expected/gin_incomplete_splits.out +++ b/src/test/modules/gin/expected/gin_incomplete_splits.out @@ -12,6 +12,13 @@ -- This uses injection points to cause errors that leave some page -- splits in "incomplete" state create extension injection_points; +-- Make all injection points local to this process, for concurrency. +SELECT injection_points_set_local(); + injection_points_set_local +---------------------------- + +(1 row) + -- Use the index for all the queries set enable_seqscan=off; -- Print a NOTICE whenever an incomplete split gets fixed diff --git a/src/test/modules/gin/meson.build b/src/test/modules/gin/meson.build index 5ec0760a276..9734b51de2d 100644 --- a/src/test/modules/gin/meson.build +++ b/src/test/modules/gin/meson.build @@ -12,7 +12,5 @@ tests += { 'sql': [ 'gin_incomplete_splits', ], - # The injection points are cluster-wide, so disable installcheck - 'runningcheck': false, }, } diff --git a/src/test/modules/gin/sql/gin_incomplete_splits.sql b/src/test/modules/gin/sql/gin_incomplete_splits.sql index ea3667b38d0..ebf0f620f0c 100644 --- a/src/test/modules/gin/sql/gin_incomplete_splits.sql +++ b/src/test/modules/gin/sql/gin_incomplete_splits.sql @@ -14,6 +14,9 @@ -- splits in "incomplete" state create extension injection_points; +-- Make all injection points local to this process, for concurrency. +SELECT injection_points_set_local(); + -- Use the index for all the queries set enable_seqscan=off; |