Hi, On Wed, 25 Oct 2023 at 07:13, Michael Paquier <mich...@paquier.xyz> wrote: > > Hi all, > > I don't remember how many times in the last few years when I've had to > hack the backend to produce a test case that involves a weird race > condition across multiple processes running in the backend, to be able > to prove a point or just test a fix (one recent case: 2b8e5273e949). > Usually, I come to hardcoding stuff for the following situations: > - Trigger a PANIC, to force recovery. > - A FATAL, to take down a session, or just an ERROR. > - palloc() failure injection. > - Sleep to slow down a code path. > - Pause and release with condition variable.
I liked the idea; thanks for working on this! What do you think about creating a function for updating the already created injection point's callback or name (mostly callback)? For now, you need to drop and recreate the injection point to change the callback or the name. Here is my code correctness review: diff --git a/meson_options.txt b/meson_options.txt +option('injection_points', type: 'boolean', value: true, + description: 'Enable injection points') + It is enabled by default while building with meson. diff --git a/src/backend/utils/misc/injection_point.c b/src/backend/utils/misc/injection_point.c + LWLockRelease(InjectionPointLock); + + /* If not found, do nothing? */ + if (!found) + return; It would be good to log a warning message here. I tried to compile that with -Dwerror=true -Dinjection_points=false and got some errors (warnings): injection_point.c: In function ‘InjectionPointShmemSize’: injection_point.c:59:1: error: control reaches end of non-void function [-Werror=return-type] injection_point.c: At top level: injection_point.c:32:14: error: ‘InjectionPointHashByName’ defined but not used [-Werror=unused-variable] test_injection_points.c: In function ‘test_injection_points_run’: test_injection_points.c:69:21: error: unused variable ‘name’ [-Werror=unused-variable] The test_injection_points test runs and passes although I set -Dinjection_points=false. That could be misleading, IMO the test should be skipped if Postgres is not compiled with the injection points. Regards, Nazir Bilal Yavuz Microsoft