Re: Add pg_get_injection_points() for information of injection points

Ranier Vilela <ranier.vf@gmail.com>

From: Ranier Vilela <ranier.vf@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-04-14T12:46:12Z
Lists: pgsql-hackers
Hi Michael.

Em dom., 13 de abr. de 2025 às 21:36, Michael Paquier <michael@paquier.xyz>
escreveu:

> Hi all,
>
> One thing that's been lacking in injection points is the possibility
> to look at the state of the injection points in shared memory through
> some SQL.  This was on my tablets for some time, but I have not taken
> the time to do the actual legwork.
>
> The attached patch adds a SRF that returns a set of tuples made of the
> name, library and function for all the injection points attached to
> the system.  This implementation relies on a new function added in
> injection_point.c, called InjectionPointList(), that retrieves a
> palloc()'d array of the injection points, hiding from the callers the
> internals of what this stuff does with the shmem array lookup.
>
> This is useful for monitoring or in tests, to make sure for example
> that nothing is left around at the end of a script.  I have a
> different proposal planned for this area of the code, where this
> function would be good to have, but I am sending an independent patch
> as this stuff is useful on its own.
>
> The patch includes a couple of tests and some documentation.
>
I think that it would be more productive to use the "int idx", to store
*num_points,
avoiding counting inside the loop, no?

Function InjectionPointList:
+ uint32 max_inuse;
+   int idx;
+ for (idx = 0; idx < max_inuse; idx++)- (*num_points)++;
+   *num_points = idx;
+ return result;

The function *InjectionPointList*  counts "int", but the function
*pg_get_injection_points* expects uint32?

best regards,
Ranier Vilela

Commits

  1. injection_points: Add injection_points_list()

  2. Add InjectionPointList() to retrieve list of injection points