Re: Pluggable cumulative statistics

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Dmitry Dolgov <9erthalion6@gmail.com>
Cc: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-07-18T05:56:20Z
Lists: pgsql-hackers

Attachments

On Tue, Jul 16, 2024 at 10:27:25AM +0900, Michael Paquier wrote:
> Perhaps we should have a few more inline functions like
> pgstat_get_entry_len() to retrieve the parts of the custom data in the
> snapshot and shmem control structures for fixed-numbered stats.  That
> would limit what extensions need to know about
> pgStatLocal.shmem->custom_data[] and
> pgStatLocal.snapshot.custom_data[], which is easy to use incorrectly.
> They don't need to know about pgStatLocal at all, either.
> 
> Thinking over the weekend on this patch, splitting injection_stats.c
> into two separate files to act as two templates for the variable and
> fixed-numbered cases would be more friendly to developers, as well.

I've been toying a bit with these two ideas, and the result is
actually neater:
- The example for fixed-numbered stats is now in its own new file,
called injection_stats_fixed.c.
- Stats in the dshash are at the same location, injection_stats.c.
- pgstat_internal.h gains two inline routines called
pgstat_get_custom_shmem_data and pgstat_get_custom_snapshot_data that
hide completely the snapshot structure for extensions when it comes to
custom fixed-numbered stats, see the new injection_stats_fixed.c that
uses them.
--
Michael

Commits

  1. injection_points: Add some fixed-numbered statistics

  2. injection_points: Add some cumulative stats for injection points

  3. Add helper routines to retrieve data for custom fixed-numbered pgstats

  4. Introduce pluggable APIs for Cumulative Statistics

  5. Switch PgStat_Kind from an enum to a uint32 type

  6. Improve comment of pgstat_read_statsfile()

  7. Add a new 'F' entry type for fixed-numbered stats in pgstats file

  8. Add PgStat_KindInfo.init_shmem_cb

  9. Use pgstat_kind_infos to write fixed shared statistics

  10. Replace hardcoded identifiers of pgstats file by #defines