Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit21471f1

Browse files
committed
Add PgStat_KindInfo.init_shmem_cb
This new callback gives fixed-numbered stats the possibility to takeactions based on the area of shared memory allocated for them.This removes from pgstat_shmem.c any knowledge specific to the typesof fixed-numbered stats, and the initializations happen in their ownfiles. Likeb68b29b, this change is useful to make this area ofthe code more pluggable, so as custom fixed-numbered stats can takeactions after their shared memory area is initialized.Reviewed-by: Bertrand DrouvotDiscussion:https://postgr.es/m/Zot5bxoPYdS7yaoy@paquier.xyz
1 parentcc22368 commit21471f1

File tree

9 files changed

+79
-10
lines changed

9 files changed

+79
-10
lines changed

‎src/backend/utils/activity/pgstat.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
354354
.shared_data_off= offsetof(PgStatShared_Archiver,stats),
355355
.shared_data_len=sizeof(((PgStatShared_Archiver*)0)->stats),
356356

357+
.init_shmem_cb=pgstat_archiver_init_shmem_cb,
357358
.reset_all_cb=pgstat_archiver_reset_all_cb,
358359
.snapshot_cb=pgstat_archiver_snapshot_cb,
359360
},
@@ -368,6 +369,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
368369
.shared_data_off= offsetof(PgStatShared_BgWriter,stats),
369370
.shared_data_len=sizeof(((PgStatShared_BgWriter*)0)->stats),
370371

372+
.init_shmem_cb=pgstat_bgwriter_init_shmem_cb,
371373
.reset_all_cb=pgstat_bgwriter_reset_all_cb,
372374
.snapshot_cb=pgstat_bgwriter_snapshot_cb,
373375
},
@@ -382,6 +384,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
382384
.shared_data_off= offsetof(PgStatShared_Checkpointer,stats),
383385
.shared_data_len=sizeof(((PgStatShared_Checkpointer*)0)->stats),
384386

387+
.init_shmem_cb=pgstat_checkpointer_init_shmem_cb,
385388
.reset_all_cb=pgstat_checkpointer_reset_all_cb,
386389
.snapshot_cb=pgstat_checkpointer_snapshot_cb,
387390
},
@@ -396,6 +399,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
396399
.shared_data_off= offsetof(PgStatShared_IO,stats),
397400
.shared_data_len=sizeof(((PgStatShared_IO*)0)->stats),
398401

402+
.init_shmem_cb=pgstat_io_init_shmem_cb,
399403
.reset_all_cb=pgstat_io_reset_all_cb,
400404
.snapshot_cb=pgstat_io_snapshot_cb,
401405
},
@@ -410,6 +414,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
410414
.shared_data_off= offsetof(PgStatShared_SLRU,stats),
411415
.shared_data_len=sizeof(((PgStatShared_SLRU*)0)->stats),
412416

417+
.init_shmem_cb=pgstat_slru_init_shmem_cb,
413418
.reset_all_cb=pgstat_slru_reset_all_cb,
414419
.snapshot_cb=pgstat_slru_snapshot_cb,
415420
},
@@ -424,6 +429,7 @@ static const PgStat_KindInfo pgstat_kind_infos[PGSTAT_NUM_KINDS] = {
424429
.shared_data_off= offsetof(PgStatShared_Wal,stats),
425430
.shared_data_len=sizeof(((PgStatShared_Wal*)0)->stats),
426431

432+
.init_shmem_cb=pgstat_wal_init_shmem_cb,
427433
.reset_all_cb=pgstat_wal_reset_all_cb,
428434
.snapshot_cb=pgstat_wal_snapshot_cb,
429435
},

‎src/backend/utils/activity/pgstat_archiver.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ pgstat_fetch_stat_archiver(void)
6262
return&pgStatLocal.snapshot.archiver;
6363
}
6464

65+
void
66+
pgstat_archiver_init_shmem_cb(void*stats)
67+
{
68+
PgStatShared_Archiver*stats_shmem= (PgStatShared_Archiver*)stats;
69+
70+
LWLockInitialize(&stats_shmem->lock,LWTRANCHE_PGSTATS_DATA);
71+
}
72+
6573
void
6674
pgstat_archiver_reset_all_cb(TimestampTzts)
6775
{

‎src/backend/utils/activity/pgstat_bgwriter.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ pgstat_fetch_stat_bgwriter(void)
7575
return&pgStatLocal.snapshot.bgwriter;
7676
}
7777

78+
void
79+
pgstat_bgwriter_init_shmem_cb(void*stats)
80+
{
81+
PgStatShared_BgWriter*stats_shmem= (PgStatShared_BgWriter*)stats;
82+
83+
LWLockInitialize(&stats_shmem->lock,LWTRANCHE_PGSTATS_DATA);
84+
}
85+
7886
void
7987
pgstat_bgwriter_reset_all_cb(TimestampTzts)
8088
{

‎src/backend/utils/activity/pgstat_checkpointer.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,14 @@ pgstat_fetch_stat_checkpointer(void)
8484
return&pgStatLocal.snapshot.checkpointer;
8585
}
8686

87+
void
88+
pgstat_checkpointer_init_shmem_cb(void*stats)
89+
{
90+
PgStatShared_Checkpointer*stats_shmem= (PgStatShared_Checkpointer*)stats;
91+
92+
LWLockInitialize(&stats_shmem->lock,LWTRANCHE_PGSTATS_DATA);
93+
}
94+
8795
void
8896
pgstat_checkpointer_reset_all_cb(TimestampTzts)
8997
{

‎src/backend/utils/activity/pgstat_io.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,15 @@ pgstat_get_io_object_name(IOObject io_object)
251251
pg_unreachable();
252252
}
253253

254+
void
255+
pgstat_io_init_shmem_cb(void*stats)
256+
{
257+
PgStatShared_IO*stat_shmem= (PgStatShared_IO*)stats;
258+
259+
for (inti=0;i<BACKEND_NUM_TYPES;i++)
260+
LWLockInitialize(&stat_shmem->locks[i],LWTRANCHE_PGSTATS_DATA);
261+
}
262+
254263
void
255264
pgstat_io_reset_all_cb(TimestampTzts)
256265
{

‎src/backend/utils/activity/pgstat_shmem.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -196,17 +196,18 @@ StatsShmemInit(void)
196196

197197
pg_atomic_init_u64(&ctl->gc_request_count,1);
198198

199-
200199
/* initialize fixed-numbered stats */
201-
LWLockInitialize(&ctl->archiver.lock,LWTRANCHE_PGSTATS_DATA);
202-
LWLockInitialize(&ctl->bgwriter.lock,LWTRANCHE_PGSTATS_DATA);
203-
LWLockInitialize(&ctl->checkpointer.lock,LWTRANCHE_PGSTATS_DATA);
204-
LWLockInitialize(&ctl->slru.lock,LWTRANCHE_PGSTATS_DATA);
205-
LWLockInitialize(&ctl->wal.lock,LWTRANCHE_PGSTATS_DATA);
206-
207-
for (inti=0;i<BACKEND_NUM_TYPES;i++)
208-
LWLockInitialize(&ctl->io.locks[i],
209-
LWTRANCHE_PGSTATS_DATA);
200+
for (intkind=PGSTAT_KIND_FIRST_VALID;kind <=PGSTAT_KIND_LAST;kind++)
201+
{
202+
constPgStat_KindInfo*kind_info=pgstat_get_kind_info(kind);
203+
char*ptr;
204+
205+
if (!kind_info->fixed_amount)
206+
continue;
207+
208+
ptr= ((char*)ctl)+kind_info->shared_ctl_off;
209+
kind_info->init_shmem_cb(ptr);
210+
}
210211
}
211212
else
212213
{

‎src/backend/utils/activity/pgstat_slru.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ pgstat_slru_flush(bool nowait)
192192
return false;
193193
}
194194

195+
void
196+
pgstat_slru_init_shmem_cb(void*stats)
197+
{
198+
PgStatShared_SLRU*stats_shmem= (PgStatShared_SLRU*)stats;
199+
200+
LWLockInitialize(&stats_shmem->lock,LWTRANCHE_PGSTATS_DATA);
201+
}
202+
195203
void
196204
pgstat_slru_reset_all_cb(TimestampTzts)
197205
{

‎src/backend/utils/activity/pgstat_wal.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,14 @@ pgstat_have_pending_wal(void)
163163
PendingWalStats.wal_sync!=0;
164164
}
165165

166+
void
167+
pgstat_wal_init_shmem_cb(void*stats)
168+
{
169+
PgStatShared_Wal*stats_shmem= (PgStatShared_Wal*)stats;
170+
171+
LWLockInitialize(&stats_shmem->lock,LWTRANCHE_PGSTATS_DATA);
172+
}
173+
166174
void
167175
pgstat_wal_reset_all_cb(TimestampTzts)
168176
{

‎src/include/utils/pgstat_internal.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,13 @@ typedef struct PgStat_KindInfo
251251
constPgStatShared_Common*header,NameData*name);
252252
bool(*from_serialized_name) (constNameData*name,PgStat_HashKey*key);
253253

254+
/*
255+
* For fixed-numbered statistics: Initialize shared memory state.
256+
*
257+
* "stats" is the pointer to the allocated shared memory area.
258+
*/
259+
void(*init_shmem_cb) (void*stats);
260+
254261
/*
255262
* For fixed-numbered statistics: Reset All.
256263
*/
@@ -528,6 +535,7 @@ extern void pgstat_snapshot_fixed(PgStat_Kind kind);
528535
* Functions in pgstat_archiver.c
529536
*/
530537

538+
externvoidpgstat_archiver_init_shmem_cb(void*stats);
531539
externvoidpgstat_archiver_reset_all_cb(TimestampTzts);
532540
externvoidpgstat_archiver_snapshot_cb(void);
533541

@@ -536,6 +544,7 @@ extern void pgstat_archiver_snapshot_cb(void);
536544
* Functions in pgstat_bgwriter.c
537545
*/
538546

547+
externvoidpgstat_bgwriter_init_shmem_cb(void*stats);
539548
externvoidpgstat_bgwriter_reset_all_cb(TimestampTzts);
540549
externvoidpgstat_bgwriter_snapshot_cb(void);
541550

@@ -544,6 +553,7 @@ extern void pgstat_bgwriter_snapshot_cb(void);
544553
* Functions in pgstat_checkpointer.c
545554
*/
546555

556+
externvoidpgstat_checkpointer_init_shmem_cb(void*stats);
547557
externvoidpgstat_checkpointer_reset_all_cb(TimestampTzts);
548558
externvoidpgstat_checkpointer_snapshot_cb(void);
549559

@@ -574,6 +584,7 @@ extern bool pgstat_function_flush_cb(PgStat_EntryRef *entry_ref, bool nowait);
574584
*/
575585

576586
externboolpgstat_flush_io(boolnowait);
587+
externvoidpgstat_io_init_shmem_cb(void*stats);
577588
externvoidpgstat_io_reset_all_cb(TimestampTzts);
578589
externvoidpgstat_io_snapshot_cb(void);
579590

@@ -632,6 +643,7 @@ extern PgStatShared_Common *pgstat_init_entry(PgStat_Kind kind,
632643
*/
633644

634645
externboolpgstat_slru_flush(boolnowait);
646+
externvoidpgstat_slru_init_shmem_cb(void*stats);
635647
externvoidpgstat_slru_reset_all_cb(TimestampTzts);
636648
externvoidpgstat_slru_snapshot_cb(void);
637649

@@ -644,6 +656,7 @@ extern bool pgstat_flush_wal(bool nowait);
644656
externvoidpgstat_init_wal(void);
645657
externboolpgstat_have_pending_wal(void);
646658

659+
externvoidpgstat_wal_init_shmem_cb(void*stats);
647660
externvoidpgstat_wal_reset_all_cb(TimestampTzts);
648661
externvoidpgstat_wal_snapshot_cb(void);
649662

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp