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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user