From 5105c90796811f62711538155d207e5311eacf9b Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 10 Apr 2024 13:48:13 +0900 Subject: [PATCH] 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/ZhNG4Io9uYOgwv3F@paquier.xyz --- src/test/modules/gin/Makefile | 3 --- src/test/modules/gin/expected/gin_incomplete_splits.out | 7 +++++++ src/test/modules/gin/meson.build | 2 -- 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 da4c9cea5e..e007e38ac2 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 973a8ce6c8..15574e547a 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 5ec0760a27..9734b51de2 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 ea3667b38d..ebf0f620f0 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;