1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-22 12:22:45 +03:00

Add wait event type "InjectionPoint", a custom type like "Extension".

Both injection points and customization of type "Extension" are new in
v17, so this just changes a detail of an unreleased feature.

Reported by Robert Haas.  Reviewed by Michael Paquier.

Discussion: https://postgr.es/m/CA+TgmobfMU5pdXP36D5iAwxV5WKE_vuDLtp_1QyH+H5jMMt21g@mail.gmail.com
This commit is contained in:
Noah Misch
2024-06-27 19:21:05 -07:00
parent 0844b39689
commit bb93640a68
13 changed files with 215 additions and 131 deletions

View File

@@ -48,7 +48,7 @@ pg_get_wait_events(PG_FUNCTION_ARGS)
#define PG_GET_WAIT_EVENTS_COLS 3
ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
char **waiteventnames;
int nbextwaitevents;
int nbwaitevents;
/* Build tuplestore to hold the result rows */
InitMaterializedSRF(fcinfo, 0);
@@ -67,9 +67,10 @@ pg_get_wait_events(PG_FUNCTION_ARGS)
}
/* Handle custom wait events for extensions */
waiteventnames = GetWaitEventExtensionNames(&nbextwaitevents);
waiteventnames = GetWaitEventCustomNames(PG_WAIT_EXTENSION,
&nbwaitevents);
for (int idx = 0; idx < nbextwaitevents; idx++)
for (int idx = 0; idx < nbwaitevents; idx++)
{
StringInfoData buf;
Datum values[PG_GET_WAIT_EVENTS_COLS] = {0};
@@ -89,5 +90,29 @@ pg_get_wait_events(PG_FUNCTION_ARGS)
tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
}
/* Likewise for injection points */
waiteventnames = GetWaitEventCustomNames(PG_WAIT_INJECTIONPOINT,
&nbwaitevents);
for (int idx = 0; idx < nbwaitevents; idx++)
{
StringInfoData buf;
Datum values[PG_GET_WAIT_EVENTS_COLS] = {0};
bool nulls[PG_GET_WAIT_EVENTS_COLS] = {0};
values[0] = CStringGetTextDatum("InjectionPoint");
values[1] = CStringGetTextDatum(waiteventnames[idx]);
initStringInfo(&buf);
appendStringInfo(&buf,
"Waiting for injection point \"%s\"",
waiteventnames[idx]);
values[2] = CStringGetTextDatum(buf.data);
tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
}
return (Datum) 0;
}