1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-02 11:44:50 +03:00

Switch PgStat_Kind from an enum to a uint32 type

A follow-up patch is planned to make cumulative statistics pluggable,
and using a type is useful in the internal routines used by pgstats as
PgStat_Kind may have a value that was not originally in the enum removed
here, once made pluggable.

While on it, this commit switches pgstat_is_kind_valid() to use
PgStat_Kind rather than an int, to be more consistent with its existing
callers.  Some loops based on the stats kind IDs are switched to use
PgStat_Kind rather than int, for consistency with the new time.

Author: Michael Paquier
Reviewed-by: Dmitry Dolgov, Bertrand Drouvot
Discussion: https://postgr.es/m/Zmqm9j5EO0I4W8dx@paquier.xyz
This commit is contained in:
Michael Paquier 2024-08-02 04:49:34 +09:00
parent b860848232
commit 3188a4582a
3 changed files with 25 additions and 26 deletions

View File

@ -183,7 +183,7 @@ static void pgstat_prep_snapshot(void);
static void pgstat_build_snapshot(void); static void pgstat_build_snapshot(void);
static void pgstat_build_snapshot_fixed(PgStat_Kind kind); static void pgstat_build_snapshot_fixed(PgStat_Kind kind);
static inline bool pgstat_is_kind_valid(int ikind); static inline bool pgstat_is_kind_valid(PgStat_Kind kind);
/* ---------- /* ----------
@ -1089,7 +1089,7 @@ pgstat_build_snapshot(void)
/* /*
* Build snapshot of all fixed-numbered stats. * Build snapshot of all fixed-numbered stats.
*/ */
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++) for (PgStat_Kind kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{ {
const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
@ -1286,7 +1286,7 @@ pgstat_flush_pending_entries(bool nowait)
PgStat_Kind PgStat_Kind
pgstat_get_kind_from_str(char *kind_str) pgstat_get_kind_from_str(char *kind_str)
{ {
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++) for (PgStat_Kind kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{ {
if (pg_strcasecmp(kind_str, pgstat_kind_infos[kind].name) == 0) if (pg_strcasecmp(kind_str, pgstat_kind_infos[kind].name) == 0)
return kind; return kind;
@ -1299,9 +1299,9 @@ pgstat_get_kind_from_str(char *kind_str)
} }
static inline bool static inline bool
pgstat_is_kind_valid(int ikind) pgstat_is_kind_valid(PgStat_Kind kind)
{ {
return ikind >= PGSTAT_KIND_FIRST_VALID && ikind <= PGSTAT_KIND_LAST; return kind >= PGSTAT_KIND_FIRST_VALID && kind <= PGSTAT_KIND_LAST;
} }
const PgStat_KindInfo * const PgStat_KindInfo *
@ -1393,7 +1393,7 @@ pgstat_write_statsfile(XLogRecPtr redo)
write_chunk_s(fpout, &redo); write_chunk_s(fpout, &redo);
/* Write various stats structs for fixed number of objects */ /* Write various stats structs for fixed number of objects */
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++) for (PgStat_Kind kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{ {
char *ptr; char *ptr;
const PgStat_KindInfo *info = pgstat_get_kind_info(kind); const PgStat_KindInfo *info = pgstat_get_kind_info(kind);
@ -1777,7 +1777,7 @@ pgstat_reset_after_failure(void)
TimestampTz ts = GetCurrentTimestamp(); TimestampTz ts = GetCurrentTimestamp();
/* reset fixed-numbered stats */ /* reset fixed-numbered stats */
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++) for (PgStat_Kind kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{ {
const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);

View File

@ -197,7 +197,7 @@ StatsShmemInit(void)
pg_atomic_init_u64(&ctl->gc_request_count, 1); pg_atomic_init_u64(&ctl->gc_request_count, 1);
/* initialize fixed-numbered stats */ /* initialize fixed-numbered stats */
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++) for (PgStat_Kind kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{ {
const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
char *ptr; char *ptr;

View File

@ -33,26 +33,25 @@
#define PG_STAT_TMP_DIR "pg_stat_tmp" #define PG_STAT_TMP_DIR "pg_stat_tmp"
/* The types of statistics entries */ /* The types of statistics entries */
typedef enum PgStat_Kind #define PgStat_Kind uint32
{
/* use 0 for INVALID, to catch zero-initialized data */ /* use 0 for INVALID, to catch zero-initialized data */
PGSTAT_KIND_INVALID = 0, #define PGSTAT_KIND_INVALID 0
/* stats for variable-numbered objects */ /* stats for variable-numbered objects */
PGSTAT_KIND_DATABASE, /* database-wide statistics */ #define PGSTAT_KIND_DATABASE 1 /* database-wide statistics */
PGSTAT_KIND_RELATION, /* per-table statistics */ #define PGSTAT_KIND_RELATION 2 /* per-table statistics */
PGSTAT_KIND_FUNCTION, /* per-function statistics */ #define PGSTAT_KIND_FUNCTION 3 /* per-function statistics */
PGSTAT_KIND_REPLSLOT, /* per-slot statistics */ #define PGSTAT_KIND_REPLSLOT 4 /* per-slot statistics */
PGSTAT_KIND_SUBSCRIPTION, /* per-subscription statistics */ #define PGSTAT_KIND_SUBSCRIPTION 5 /* per-subscription statistics */
/* stats for fixed-numbered objects */ /* stats for fixed-numbered objects */
PGSTAT_KIND_ARCHIVER, #define PGSTAT_KIND_ARCHIVER 6
PGSTAT_KIND_BGWRITER, #define PGSTAT_KIND_BGWRITER 7
PGSTAT_KIND_CHECKPOINTER, #define PGSTAT_KIND_CHECKPOINTER 8
PGSTAT_KIND_IO, #define PGSTAT_KIND_IO 9
PGSTAT_KIND_SLRU, #define PGSTAT_KIND_SLRU 10
PGSTAT_KIND_WAL, #define PGSTAT_KIND_WAL 11
} PgStat_Kind;
#define PGSTAT_KIND_FIRST_VALID PGSTAT_KIND_DATABASE #define PGSTAT_KIND_FIRST_VALID PGSTAT_KIND_DATABASE
#define PGSTAT_KIND_LAST PGSTAT_KIND_WAL #define PGSTAT_KIND_LAST PGSTAT_KIND_WAL