1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-16 06:01:02 +03:00

Support loading of injection points

This can be used to load an injection point and prewarm the
backend-level cache before running it, to avoid issues if the point
cannot be loaded due to restrictions in the code path where it would be
run, like a critical section where no memory allocation can happen
(load_external_function() can do allocations when expanding a library
name).

Tests can use a macro called INJECTION_POINT_LOAD() to load an injection
point.  The test module injection_points gains some tests, and a SQL
function able to load an injection point.

Based on a request from Andrey Borodin, who has implemented a test for
multixacts requiring this facility.

Reviewed-by: Andrey Borodin
Discussion: https://postgr.es/m/ZkrBE1e2q2wGvsoN@paquier.xyz
This commit is contained in:
Michael Paquier
2024-07-05 17:41:49 +09:00
parent 98347b5a3a
commit 4b211003ec
7 changed files with 168 additions and 36 deletions

View File

@ -3618,6 +3618,20 @@ INJECTION_POINT(name);
their own code using the same macro.
</para>
<para>
An injection point with a given <literal>name</literal> can be loaded
using macro:
<programlisting>
INJECTION_POINT_LOAD(name);
</programlisting>
This will load the injection point callback into the process cache,
doing all memory allocations at this stage without running the callback.
This is useful when an injection point is attached in a critical section
where no memory can be allocated: load the injection point outside the
critical section, then run it in the critical section.
</para>
<para>
Add-ins can attach callbacks to an already-declared injection point by
calling: