Add PgStat_KindInfo.init_shmem_cb
This new callback gives fixed-numbered stats the possibility to take actions based on the area of shared memory allocated for them. This removes from pgstat_shmem.c any knowledge specific to the types of fixed-numbered stats, and the initializations happen in their own files. Like b68b29bc8fec, this change is useful to make this area of the code more pluggable, so as custom fixed-numbered stats can take actions after their shared memory area is initialized. Reviewed-by: Bertrand Drouvot Discussion: https://postgr.es/m/Zot5bxoPYdS7yaoy@paquier.xyz
This commit is contained in:
parent
cc2236854e
commit
21471f18e9
@ -354,6 +354,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_Archiver, stats),
|
.shared_data_off = offsetof(PgStatShared_Archiver, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_Archiver *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_Archiver *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_archiver_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_archiver_reset_all_cb,
|
.reset_all_cb = pgstat_archiver_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_archiver_snapshot_cb,
|
.snapshot_cb = pgstat_archiver_snapshot_cb,
|
||||||
},
|
},
|
||||||
@ -368,6 +369,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_BgWriter, stats),
|
.shared_data_off = offsetof(PgStatShared_BgWriter, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_BgWriter *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_BgWriter *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_bgwriter_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_bgwriter_reset_all_cb,
|
.reset_all_cb = pgstat_bgwriter_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_bgwriter_snapshot_cb,
|
.snapshot_cb = pgstat_bgwriter_snapshot_cb,
|
||||||
},
|
},
|
||||||
@ -382,6 +384,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_Checkpointer, stats),
|
.shared_data_off = offsetof(PgStatShared_Checkpointer, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_Checkpointer *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_Checkpointer *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_checkpointer_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_checkpointer_reset_all_cb,
|
.reset_all_cb = pgstat_checkpointer_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_checkpointer_snapshot_cb,
|
.snapshot_cb = pgstat_checkpointer_snapshot_cb,
|
||||||
},
|
},
|
||||||
@ -396,6 +399,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_IO, stats),
|
.shared_data_off = offsetof(PgStatShared_IO, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_IO *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_IO *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_io_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_io_reset_all_cb,
|
.reset_all_cb = pgstat_io_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_io_snapshot_cb,
|
.snapshot_cb = pgstat_io_snapshot_cb,
|
||||||
},
|
},
|
||||||
@ -410,6 +414,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_SLRU, stats),
|
.shared_data_off = offsetof(PgStatShared_SLRU, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_SLRU *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_SLRU *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_slru_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_slru_reset_all_cb,
|
.reset_all_cb = pgstat_slru_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_slru_snapshot_cb,
|
.snapshot_cb = pgstat_slru_snapshot_cb,
|
||||||
},
|
},
|
||||||
@ -424,6 +429,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
|
|||||||
.shared_data_off = offsetof(PgStatShared_Wal, stats),
|
.shared_data_off = offsetof(PgStatShared_Wal, stats),
|
||||||
.shared_data_len = sizeof(((PgStatShared_Wal *) 0)->stats),
|
.shared_data_len = sizeof(((PgStatShared_Wal *) 0)->stats),
|
||||||
|
|
||||||
|
.init_shmem_cb = pgstat_wal_init_shmem_cb,
|
||||||
.reset_all_cb = pgstat_wal_reset_all_cb,
|
.reset_all_cb = pgstat_wal_reset_all_cb,
|
||||||
.snapshot_cb = pgstat_wal_snapshot_cb,
|
.snapshot_cb = pgstat_wal_snapshot_cb,
|
||||||
},
|
},
|
||||||
|
@ -62,6 +62,14 @@ pgstat_fetch_stat_archiver(void)
|
|||||||
return &pgStatLocal.snapshot.archiver;
|
return &pgStatLocal.snapshot.archiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_archiver_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_Archiver *stats_shmem = (PgStatShared_Archiver *) stats;
|
||||||
|
|
||||||
|
LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_archiver_reset_all_cb(TimestampTz ts)
|
pgstat_archiver_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -75,6 +75,14 @@ pgstat_fetch_stat_bgwriter(void)
|
|||||||
return &pgStatLocal.snapshot.bgwriter;
|
return &pgStatLocal.snapshot.bgwriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_bgwriter_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_BgWriter *stats_shmem = (PgStatShared_BgWriter *) stats;
|
||||||
|
|
||||||
|
LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_bgwriter_reset_all_cb(TimestampTz ts)
|
pgstat_bgwriter_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,14 @@ pgstat_fetch_stat_checkpointer(void)
|
|||||||
return &pgStatLocal.snapshot.checkpointer;
|
return &pgStatLocal.snapshot.checkpointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_checkpointer_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_Checkpointer *stats_shmem = (PgStatShared_Checkpointer *) stats;
|
||||||
|
|
||||||
|
LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_checkpointer_reset_all_cb(TimestampTz ts)
|
pgstat_checkpointer_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -251,6 +251,15 @@ pgstat_get_io_object_name(IOObject io_object)
|
|||||||
pg_unreachable();
|
pg_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_io_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_IO *stat_shmem = (PgStatShared_IO *) stats;
|
||||||
|
|
||||||
|
for (int i = 0; i < BACKEND_NUM_TYPES; i++)
|
||||||
|
LWLockInitialize(&stat_shmem->locks[i], LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_io_reset_all_cb(TimestampTz ts)
|
pgstat_io_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -196,17 +196,18 @@ 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 */
|
||||||
LWLockInitialize(&ctl->archiver.lock, LWTRANCHE_PGSTATS_DATA);
|
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
|
||||||
LWLockInitialize(&ctl->bgwriter.lock, LWTRANCHE_PGSTATS_DATA);
|
{
|
||||||
LWLockInitialize(&ctl->checkpointer.lock, LWTRANCHE_PGSTATS_DATA);
|
const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind);
|
||||||
LWLockInitialize(&ctl->slru.lock, LWTRANCHE_PGSTATS_DATA);
|
char *ptr;
|
||||||
LWLockInitialize(&ctl->wal.lock, LWTRANCHE_PGSTATS_DATA);
|
|
||||||
|
|
||||||
for (int i = 0; i < BACKEND_NUM_TYPES; i++)
|
if (!kind_info->fixed_amount)
|
||||||
LWLockInitialize(&ctl->io.locks[i],
|
continue;
|
||||||
LWTRANCHE_PGSTATS_DATA);
|
|
||||||
|
ptr = ((char *) ctl) + kind_info->shared_ctl_off;
|
||||||
|
kind_info->init_shmem_cb(ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -192,6 +192,14 @@ pgstat_slru_flush(bool nowait)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_slru_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_SLRU *stats_shmem = (PgStatShared_SLRU *) stats;
|
||||||
|
|
||||||
|
LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_slru_reset_all_cb(TimestampTz ts)
|
pgstat_slru_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -163,6 +163,14 @@ pgstat_have_pending_wal(void)
|
|||||||
PendingWalStats.wal_sync != 0;
|
PendingWalStats.wal_sync != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pgstat_wal_init_shmem_cb(void *stats)
|
||||||
|
{
|
||||||
|
PgStatShared_Wal *stats_shmem = (PgStatShared_Wal *) stats;
|
||||||
|
|
||||||
|
LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pgstat_wal_reset_all_cb(TimestampTz ts)
|
pgstat_wal_reset_all_cb(TimestampTz ts)
|
||||||
{
|
{
|
||||||
|
@ -251,6 +251,13 @@ typedef struct PgStat_KindInfo
|
|||||||
const PgStatShared_Common *header, NameData *name);
|
const PgStatShared_Common *header, NameData *name);
|
||||||
bool (*from_serialized_name) (const NameData *name, PgStat_HashKey *key);
|
bool (*from_serialized_name) (const NameData *name, PgStat_HashKey *key);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For fixed-numbered statistics: Initialize shared memory state.
|
||||||
|
*
|
||||||
|
* "stats" is the pointer to the allocated shared memory area.
|
||||||
|
*/
|
||||||
|
void (*init_shmem_cb) (void *stats);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For fixed-numbered statistics: Reset All.
|
* For fixed-numbered statistics: Reset All.
|
||||||
*/
|
*/
|
||||||
@ -528,6 +535,7 @@ extern void pgstat_snapshot_fixed(PgStat_Kind kind);
|
|||||||
* Functions in pgstat_archiver.c
|
* Functions in pgstat_archiver.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern void pgstat_archiver_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_archiver_reset_all_cb(TimestampTz ts);
|
extern void pgstat_archiver_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_archiver_snapshot_cb(void);
|
extern void pgstat_archiver_snapshot_cb(void);
|
||||||
|
|
||||||
@ -536,6 +544,7 @@ extern void pgstat_archiver_snapshot_cb(void);
|
|||||||
* Functions in pgstat_bgwriter.c
|
* Functions in pgstat_bgwriter.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern void pgstat_bgwriter_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_bgwriter_reset_all_cb(TimestampTz ts);
|
extern void pgstat_bgwriter_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_bgwriter_snapshot_cb(void);
|
extern void pgstat_bgwriter_snapshot_cb(void);
|
||||||
|
|
||||||
@ -544,6 +553,7 @@ extern void pgstat_bgwriter_snapshot_cb(void);
|
|||||||
* Functions in pgstat_checkpointer.c
|
* Functions in pgstat_checkpointer.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern void pgstat_checkpointer_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_checkpointer_reset_all_cb(TimestampTz ts);
|
extern void pgstat_checkpointer_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_checkpointer_snapshot_cb(void);
|
extern void pgstat_checkpointer_snapshot_cb(void);
|
||||||
|
|
||||||
@ -574,6 +584,7 @@ extern bool pgstat_function_flush_cb(PgStat_EntryRef *entry_ref, bool nowait);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
extern bool pgstat_flush_io(bool nowait);
|
extern bool pgstat_flush_io(bool nowait);
|
||||||
|
extern void pgstat_io_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_io_reset_all_cb(TimestampTz ts);
|
extern void pgstat_io_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_io_snapshot_cb(void);
|
extern void pgstat_io_snapshot_cb(void);
|
||||||
|
|
||||||
@ -632,6 +643,7 @@ extern PgStatShared_Common *pgstat_init_entry(PgStat_Kind kind,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
extern bool pgstat_slru_flush(bool nowait);
|
extern bool pgstat_slru_flush(bool nowait);
|
||||||
|
extern void pgstat_slru_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_slru_reset_all_cb(TimestampTz ts);
|
extern void pgstat_slru_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_slru_snapshot_cb(void);
|
extern void pgstat_slru_snapshot_cb(void);
|
||||||
|
|
||||||
@ -644,6 +656,7 @@ extern bool pgstat_flush_wal(bool nowait);
|
|||||||
extern void pgstat_init_wal(void);
|
extern void pgstat_init_wal(void);
|
||||||
extern bool pgstat_have_pending_wal(void);
|
extern bool pgstat_have_pending_wal(void);
|
||||||
|
|
||||||
|
extern void pgstat_wal_init_shmem_cb(void *stats);
|
||||||
extern void pgstat_wal_reset_all_cb(TimestampTz ts);
|
extern void pgstat_wal_reset_all_cb(TimestampTz ts);
|
||||||
extern void pgstat_wal_snapshot_cb(void);
|
extern void pgstat_wal_snapshot_cb(void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user