diff options
| author | Michael Paquier | 2024-09-05 07:05:21 +0000 |
|---|---|---|
| committer | Michael Paquier | 2024-09-05 07:05:21 +0000 |
| commit | 1b373aed20e61e4a3033e1e396e4ba7c2a96bc20 (patch) | |
| tree | 6d2311110471eb4adb465a6d92c59dc02081204d /src/backend | |
| parent | 341e9a05e7b4c4fb2a1e539a5073dfd0e5b46735 (diff) | |
Add callback for backend initialization in pgstats
pgstat_initialize() is currently used by the WAL stats as a code path to
take some custom actions when a backend starts. A callback is added to
generalize the concept so as all stats kinds can do the same, for
builtin and custom kinds, if set.
Reviewed-by: Bertrand Drouvot, Kyotaro Horiguchi
Discussion: https://postgr.es/m/ZtZr1K4PLdeWclXY@paquier.xyz
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/utils/activity/pgstat.c | 14 | ||||
| -rw-r--r-- | src/backend/utils/activity/pgstat_wal.c | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index 612158f2b96..178b5ef65aa 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -441,6 +441,7 @@ static const PgStat_KindInfo pgstat_kind_builtin_infos[PGSTAT_KIND_BUILTIN_SIZE] .shared_data_off = offsetof(PgStatShared_Wal, stats), .shared_data_len = sizeof(((PgStatShared_Wal *) 0)->stats), + .init_backend_cb = pgstat_wal_init_backend_cb, .init_shmem_cb = pgstat_wal_init_shmem_cb, .reset_all_cb = pgstat_wal_reset_all_cb, .snapshot_cb = pgstat_wal_snapshot_cb, @@ -604,10 +605,19 @@ pgstat_initialize(void) pgstat_attach_shmem(); - pgstat_init_wal(); - pgstat_init_snapshot_fixed(); + /* Backend initialization callbacks */ + for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++) + { + const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); + + if (kind_info == NULL || kind_info->init_backend_cb == NULL) + continue; + + kind_info->init_backend_cb(); + } + /* Set up a process-exit hook to clean up */ before_shmem_exit(pgstat_shutdown_hook, 0); diff --git a/src/backend/utils/activity/pgstat_wal.c b/src/backend/utils/activity/pgstat_wal.c index e2a3f6b865c..8c19c3f2fd5 100644 --- a/src/backend/utils/activity/pgstat_wal.c +++ b/src/backend/utils/activity/pgstat_wal.c @@ -138,7 +138,7 @@ pgstat_flush_wal(bool nowait) } void -pgstat_init_wal(void) +pgstat_wal_init_backend_cb(void) { /* * Initialize prevWalUsage with pgWalUsage so that pgstat_flush_wal() can |
