.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,
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);
*/
uint32 pending_size;
+ /*
+ * Perform custom actions when initializing a backend (standalone or under
+ * postmaster). Optional.
+ */
+ void (*init_backend_cb) (void);
+
/*
* For variable-numbered stats: flush pending stats. Required if pending
* data is used.
*/
extern bool pgstat_flush_wal(bool nowait);
-extern void pgstat_init_wal(void);
extern bool pgstat_have_pending_wal(void);
+extern void pgstat_wal_init_backend_cb(void);
extern void pgstat_wal_init_shmem_cb(void *stats);
extern void pgstat_wal_reset_all_cb(TimestampTz ts);
extern void pgstat_wal_snapshot_cb(void);