Add INJECTION_POINT_CACHED() to run injection points directly from cache
authorMichael Paquier <michael@paquier.xyz>
Thu, 18 Jul 2024 00:50:41 +0000 (09:50 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 18 Jul 2024 00:50:41 +0000 (09:50 +0900)
commita0a5869a8598cdeae1d2f2d632038d26dcc69d19
treef8d31f1d376c1fc8bc26f434ba66e8de7ec2ee75
parent6159331acfbe2d08361947324e09e446138c7bc1
Add INJECTION_POINT_CACHED() to run injection points directly from cache

This new macro is able to perform a direct lookup from the local cache
of injection points (refreshed each time a point is loaded or run),
without touching the shared memory state of injection points at all.

This works in combination with INJECTION_POINT_LOAD(), and it is better
than INJECTION_POINT() in a critical section due to the fact that it
would avoid all memory allocations should a concurrent detach happen
since a LOAD(), as it retrieves a callback from the backend-private
memory.

The documentation is updated to describe in more details how to use this
new macro with a load.  Some tests are added to the module
injection_points based on a new SQL function that acts as a wrapper of
INJECTION_POINT_CACHED().

Based on a suggestion from Heikki Linnakangas.

Author: Heikki Linnakangas, Michael Paquier
Discussion: https://postgr.es/m/58d588d0-e63f-432f-9181-bed29313dece@iki.fi
doc/src/sgml/xfunc.sgml
src/backend/utils/misc/injection_point.c
src/include/utils/injection_point.h
src/test/modules/injection_points/expected/injection_points.out
src/test/modules/injection_points/injection_points--1.0.sql
src/test/modules/injection_points/injection_points.c
src/test/modules/injection_points/sql/injection_points.sql