postgresql/src/include
Michael Paquier d86d20f0ba Add backend support for injection points
Injection points are a new facility that makes possible for developers
to run custom code in pre-defined code paths.  Its goal is to provide
ways to design and run advanced tests, for cases like:
- Race conditions, where processes need to do actions in a controlled
ordered manner.
- Forcing a state, like an ERROR, FATAL or even PANIC for OOM, to force
recovery, etc.
- Arbitrary sleeps.

This implements some basics, and there are plans to extend it more in
the future depending on what's required.  Hence, this commit adds a set
of routines in the backend that allows developers to attach, detach and
run injection points:
- A code path calling an injection point can be declared with the macro
INJECTION_POINT(name).
- InjectionPointAttach() and InjectionPointDetach() to respectively
attach and detach a callback to/from an injection point.  An injection
point name is registered in a shmem hash table with a library name and a
function name, which will be used to load the callback attached to an
injection point when its code path is run.

Injection point names are just strings, so as an injection point can be
declared and run by out-of-core extensions and modules, with callbacks
defined in external libraries.

This facility is hidden behind a dedicated switch for ./configure and
meson, disabled by default.

Note that backends use a local cache to store callbacks already loaded,
cleaning up their cache if a callback has found to be removed on a
best-effort basis.  This could be refined further but any tests but what
we have here was fine with the tests I've written while implementing
these backend APIs.

Author: Michael Paquier, with doc suggestions from Ashutosh Bapat.
Reviewed-by: Ashutosh Bapat, Nathan Bossart, Álvaro Herrera, Dilip
Kumar, Amul Sul, Nazir Bilal Yavuz
Discussion: https://postgr.es/m/ZTiV8tn_MIb_H2rE@paquier.xyz
2024-01-22 10:15:50 +09:00
..
access Add stratnum GiST support function 2024-01-19 15:42:13 +01:00
archive Update copyright for 2024 2024-01-03 20:49:05 -05:00
backup Update copyright for 2024 2024-01-03 20:49:05 -05:00
bootstrap Update copyright for 2024 2024-01-03 20:49:05 -05:00
catalog Add planner support functions for range operators <@ and @>. 2024-01-20 13:57:54 -05:00
commands Rename COPY option from SAVE_ERROR_TO to ON_ERROR 2024-01-19 15:15:51 +02:00
common Fixed misspelled byteswap function for big endian machines 2024-01-19 13:26:18 +07:00
datatype Update copyright for 2024 2024-01-03 20:49:05 -05:00
executor Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe_utils Update copyright for 2024 2024-01-03 20:49:05 -05:00
foreign Update copyright for 2024 2024-01-03 20:49:05 -05:00
jit Update copyright for 2024 2024-01-03 20:49:05 -05:00
lib Update copyright for 2024 2024-01-03 20:49:05 -05:00
libpq Make dblink interruptible, via new libpqsrv APIs. 2024-01-08 11:39:56 -08:00
mb Update copyright for 2024 2024-01-03 20:49:05 -05:00
nodes Explore alternative orderings of group-by pathkeys during optimization. 2024-01-21 22:21:36 +02:00
optimizer Explore alternative orderings of group-by pathkeys during optimization. 2024-01-21 22:21:36 +02:00
parser Update copyright for 2024 2024-01-03 20:49:05 -05:00
partitioning Update copyright for 2024 2024-01-03 20:49:05 -05:00
pch Update copyright for 2024 2024-01-03 20:49:05 -05:00
port Update copyright for 2024 2024-01-03 20:49:05 -05:00
portability Update copyright for 2024 2024-01-03 20:49:05 -05:00
postmaster Add missing PGDLLIMPORT markings 2024-01-16 13:53:28 +02:00
regex Update copyright for 2024 2024-01-03 20:49:05 -05:00
replication Update copyright for 2024 2024-01-03 20:49:05 -05:00
rewrite Update copyright for 2024 2024-01-03 20:49:05 -05:00
snowball Update copyright for 2024 2024-01-03 20:49:05 -05:00
statistics Update copyright for 2024 2024-01-03 20:49:05 -05:00
storage Introduce the dynamic shared memory registry. 2024-01-19 14:24:36 -06:00
tcop Update copyright for 2024 2024-01-03 20:49:05 -05:00
tsearch Update copyright for 2024 2024-01-03 20:49:05 -05:00
utils Add backend support for injection points 2024-01-22 10:15:50 +09:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fmgr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
funcapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
getopt_long.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
Makefile Remove distprep 2023-11-06 15:18:04 +01:00
meson.build Update copyright for 2024 2024-01-03 20:49:05 -05:00
miscadmin.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_config.h.in Add backend support for injection points 2024-01-22 10:15:50 +09:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_ext.h.meson meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00
pg_config_manual.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_getopt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_trace.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgstat.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtar.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtime.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
port.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
postgres.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
postgres_ext.h Move RelFileNumber declarations to common/relpath.h. 2022-09-27 12:01:57 -04:00
postgres_fe.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varatt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
windowapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00