public inbox for [email protected]
help / color / mirror / Atom feedFrom: Michael Paquier <[email protected]>
To: Postgres hackers <[email protected]>
Subject: Add isolation test template in injection_points for wait/wakeup/detach
Date: Fri, 18 Oct 2024 07:44:08 +0900
Message-ID: <[email protected]> (raw)
Hi all,
This was on my TODO bucket for some time. The isolation test
"inplace" in the isolation test suite for injection_points relies on a
couple of behaviors implemented in the backend. One of them is that a
point detach should not affect a wait. Rather than having to guess
this stuff from the sole isolation test we have in this module, I
would like to add a simple test to document all these assumptions.
This also works as a simple template for a newcomer willing to
implement an isolation test with injection points. That's less
intimidating than the inplace test with its VACUUM and GRANT
interactions, based on an injection point run when updating the stats
of a relation in VACUUM.
Thoughts?
--
Michael
Attachments:
[text/x-diff] 0001-injection_points-Add-basic-isolation-test.patch (5.1K, ../[email protected]/2-0001-injection_points-Add-basic-isolation-test.patch)
download | inline diff:
From 4a0ffa49c7a7b1d3d3b878780aee6f536f38a68f Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Fri, 18 Oct 2024 07:40:46 +0900
Subject: [PATCH] injection_points: Add basic isolation test
This can act as a template when implementing an isolation test with
injection points, and tracks in a much simpler way some of the behaviors
implied in the existing isolation test "inplace". Particularly, a
detach should not affect a backend wait; a wait can should only be
stopped by a wakeup.
---
src/test/modules/injection_points/Makefile | 2 +-
.../injection_points/expected/basic.out | 74 +++++++++++++++++++
src/test/modules/injection_points/meson.build | 1 +
.../modules/injection_points/specs/basic.spec | 35 +++++++++
4 files changed, 111 insertions(+), 1 deletion(-)
create mode 100644 src/test/modules/injection_points/expected/basic.out
create mode 100644 src/test/modules/injection_points/specs/basic.spec
diff --git a/src/test/modules/injection_points/Makefile b/src/test/modules/injection_points/Makefile
index 8cb8c498e2..0753a9df58 100644
--- a/src/test/modules/injection_points/Makefile
+++ b/src/test/modules/injection_points/Makefile
@@ -13,7 +13,7 @@ PGFILEDESC = "injection_points - facility for injection points"
REGRESS = injection_points reindex_conc
REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress
-ISOLATION = inplace
+ISOLATION = basic inplace
TAP_TESTS = 1
diff --git a/src/test/modules/injection_points/expected/basic.out b/src/test/modules/injection_points/expected/basic.out
new file mode 100644
index 0000000000..840ce2dac9
--- /dev/null
+++ b/src/test/modules/injection_points/expected/basic.out
@@ -0,0 +1,74 @@
+Parsed test spec with 2 sessions
+
+starting permutation: wait1 wakeup2 detach2
+injection_points_attach
+-----------------------
+
+(1 row)
+
+step wait1: SELECT injection_points_run('injection-points-wait'); <waiting ...>
+step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
+injection_points_wakeup
+-----------------------
+
+(1 row)
+
+step wait1: <... completed>
+injection_points_run
+--------------------
+
+(1 row)
+
+step detach2: SELECT injection_points_detach('injection-points-wait');
+injection_points_detach
+-----------------------
+
+(1 row)
+
+
+starting permutation: wait1 detach2 wakeup2
+injection_points_attach
+-----------------------
+
+(1 row)
+
+step wait1: SELECT injection_points_run('injection-points-wait'); <waiting ...>
+step detach2: SELECT injection_points_detach('injection-points-wait');
+injection_points_detach
+-----------------------
+
+(1 row)
+
+step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
+injection_points_wakeup
+-----------------------
+
+(1 row)
+
+step wait1: <... completed>
+injection_points_run
+--------------------
+
+(1 row)
+
+
+starting permutation: detach2 wait1 wakeup2
+injection_points_attach
+-----------------------
+
+(1 row)
+
+step detach2: SELECT injection_points_detach('injection-points-wait');
+injection_points_detach
+-----------------------
+
+(1 row)
+
+step wait1: SELECT injection_points_run('injection-points-wait');
+injection_points_run
+--------------------
+
+(1 row)
+
+step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
+ERROR: could not find injection point injection-points-wait to wake up
diff --git a/src/test/modules/injection_points/meson.build b/src/test/modules/injection_points/meson.build
index fdb5a25d7b..58f1900115 100644
--- a/src/test/modules/injection_points/meson.build
+++ b/src/test/modules/injection_points/meson.build
@@ -42,6 +42,7 @@ tests += {
},
'isolation': {
'specs': [
+ 'basic',
'inplace',
],
},
diff --git a/src/test/modules/injection_points/specs/basic.spec b/src/test/modules/injection_points/specs/basic.spec
new file mode 100644
index 0000000000..ccd49e31ed
--- /dev/null
+++ b/src/test/modules/injection_points/specs/basic.spec
@@ -0,0 +1,35 @@
+# Basic isolation test for injection points.
+#
+# This checks the interactions between wakeup, wait and detach.
+# Feel free to use it as a template when implementing an isolation
+# test with injection points.
+
+setup
+{
+ CREATE EXTENSION injection_points;
+}
+teardown
+{
+ DROP EXTENSION injection_points;
+}
+
+# Wait happens in the first session, wakeup in the second session.
+session s1
+setup {
+ SELECT injection_points_set_local();
+ SELECT injection_points_attach('injection-points-wait', 'wait');
+}
+step wait1 { SELECT injection_points_run('injection-points-wait'); }
+
+session s2
+step wakeup2 { SELECT injection_points_wakeup('injection-points-wait'); }
+step detach2 { SELECT injection_points_detach('injection-points-wait'); }
+
+# Detach after wait and wakeup.
+permutation wait1 wakeup2 detach2
+
+# Detach before wake. s1 waits until wakeup, ignores the detach.
+permutation wait1 detach2 wakeup2
+
+# Detach before wait does not cause a wait.
+permutation detach2 wait1 wakeup2
--
2.45.2
[application/pgp-signature] signature.asc (833B, ../[email protected]/3-signature.asc)
download
view thread (2+ messages)
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: Add isolation test template in injection_points for wait/wakeup/detach
In-Reply-To: <[email protected]>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox