postgres.git / summary / log / commit / refs

commit    2eff9e678d350882f7a4b6ec6361927c9093051c
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Aug 05 02:43:33 2024 +0000

    Add helper routines to retrieve data for custom fixed-numbered pgstats
    
    This is useful for extensions to get snapshot and shmem data for custom
    cumulative statistics when these have a fixed number of objects, so as
    these do not need to know about the snapshot internals, aka pgStatLocal.
    
    An upcoming commit introducing an example template for custom cumulative
    stats with fixed-numbered objects will make use of these.  I have
    noticed that this is useful for extension developers while hacking my
    own example, actually.
    
    Author: Michael Paquier
    Reviewed-by: Dmitry Dolgov, Bertrand Drouvot
    Discussion: https://postgr.es/m/Zmqm9j5EO0I4W8dx@paquier.xyz


src/include/utils/pgstat_internal.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/include/utils/pgstat_internal.h b/src/include/utils/pgstat_internal.h index 26b4b784060..fb132e439dc 100644 --- a/src/include/utils/pgstat_internal.h +++ b/src/include/utils/pgstat_internal.h @@ -525,6 +525,8 @@ static inline int pgstat_cmp_hash_key(const void *a, const void *b, size_t size, static inline uint32 pgstat_hash_hash_key(const void *d, size_t size, void *arg); static inline size_t pgstat_get_entry_len(PgStat_Kind kind); static inline void *pgstat_get_entry_data(PgStat_Kind kind, PgStatShared_Common *entry); +static inline void *pgstat_get_custom_shmem_data(PgStat_Kind kind); +static inline void *pgstat_get_custom_snapshot_data(PgStat_Kind kind); /* @@ -842,4 +844,34 @@ pgstat_get_entry_data(PgStat_Kind kind, PgStatShared_Common *entry) return ((char *) (entry)) + off; } +/* + * Returns a pointer to the shared memory area of custom stats for + * fixed-numbered statistics. + */ +static inline void * +pgstat_get_custom_shmem_data(PgStat_Kind kind) +{ + int idx = kind - PGSTAT_KIND_CUSTOM_MIN; + + Assert(pgstat_is_kind_custom(kind)); + Assert(pgstat_get_kind_info(kind)->fixed_amount); + + return pgStatLocal.shmem->custom_data[idx]; +} + +/* + * Returns a pointer to the portion of custom data for fixed-numbered + * statistics in the current snapshot. + */ +static inline void * +pgstat_get_custom_snapshot_data(PgStat_Kind kind) +{ + int idx = kind - PGSTAT_KIND_CUSTOM_MIN; + + Assert(pgstat_is_kind_custom(kind)); + Assert(pgstat_get_kind_info(kind)->fixed_amount); + + return pgStatLocal.snapshot.custom_data[idx]; +} + #endif /* PGSTAT_INTERNAL_H */ [parent: 8036d73ae3d4]