mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
pgstat: prepare APIs used by pgstatfuncs for shared memory stats.
With the introduction of PgStat_Kind PgStat_Single_Reset_Type, PgStat_Shared_Reset_Target don't make sense anymore. Replace them with PgStat_Kind. Instead of having dedicated reset functions for different kinds of stats, use two generic helper routines (one to reset all stats of a kind, one to reset one stats entry). A number of reset functions were named pgstat_reset_*_counter(), despite affecting multiple counters. The generic helper routines get rid of pgstat_reset_single_counter(), pgstat_reset_subscription_counter(). Rename pgstat_reset_slru_counter(), pgstat_reset_replslot_counter() to pgstat_reset_slru(), pgstat_reset_replslot() respectively, and have them only deal with a single SLRU/slot. Resetting all SLRUs/slots goes through the generic pgstat_reset_of_kind(). Previously pg_stat_reset_replication_slot() used SearchNamedReplicationSlot() to check if a slot exists. API wise it seems better to move that to pgstat_replslot.c. This is done separately from the - quite large - shared memory statistics patch to make review easier. Reviewed-By: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Discussion: https://postgr.es/m/20220404041516.cctrvpadhuriawlq@alap3.anarazel.de
This commit is contained in:
@@ -23,30 +23,45 @@
|
||||
|
||||
|
||||
/*
|
||||
* Reset counters for a single replication slot, or all replication slots
|
||||
* (when name is null).
|
||||
* Reset counters for a single replication slot.
|
||||
*
|
||||
* Permission checking for this function is managed through the normal
|
||||
* GRANT system.
|
||||
*/
|
||||
void
|
||||
pgstat_reset_replslot_counter(const char *name)
|
||||
pgstat_reset_replslot(const char *name)
|
||||
{
|
||||
ReplicationSlot *slot;
|
||||
PgStat_MsgResetreplslotcounter msg;
|
||||
|
||||
AssertArg(name != NULL);
|
||||
|
||||
if (pgStatSock == PGINVALID_SOCKET)
|
||||
return;
|
||||
|
||||
if (name)
|
||||
{
|
||||
namestrcpy(&msg.m_slotname, name);
|
||||
msg.clearall = false;
|
||||
}
|
||||
else
|
||||
msg.clearall = true;
|
||||
/*
|
||||
* Check if the slot exists with the given name. It is possible that by
|
||||
* the time this message is executed the slot is dropped but at least this
|
||||
* check will ensure that the given name is for a valid slot.
|
||||
*/
|
||||
slot = SearchNamedReplicationSlot(name, true);
|
||||
|
||||
if (!slot)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("replication slot \"%s\" does not exist",
|
||||
name)));
|
||||
|
||||
/*
|
||||
* Nothing to do for physical slots as we collect stats only for logical
|
||||
* slots.
|
||||
*/
|
||||
if (SlotIsPhysical(slot))
|
||||
return;
|
||||
|
||||
pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RESETREPLSLOTCOUNTER);
|
||||
|
||||
namestrcpy(&msg.m_slotname, name);
|
||||
msg.clearall = false;
|
||||
pgstat_send(&msg, sizeof(msg));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user