mirror of https://github.com/postgres/postgres
Refactor some code related to wait events "BufferPin" and "Extension"
The following changes are done: - Addition of WaitEventBufferPin and WaitEventExtension, that hold a list of wait events related to each category. - Addition of two functions that encapsulate the list of wait events for each category. - Rename BUFFER_PIN to BUFFERPIN (only this wait event class used an underscore, requiring a specific rule in the automation script). These changes make a bit easier the automatic generation of all the code and documentation related to wait events, as all the wait event categories are now controlled by consistent structures and functions. Author: Bertrand Drouvot Discussion: https://postgr.es/m/c6f35117-4b20-4c78-1df5-d3056010dcf5@gmail.com Discussion: https://postgr.es/m/77a86b3a-c4a8-5f5d-69b9-d70bbf2e9b98@gmail.com
This commit is contained in:
parent
8c12838001
commit
2aeaf80e57
|
@ -203,7 +203,7 @@ dblink_get_conn(char *conname_or_str,
|
|||
dblink_connstr_check(connstr);
|
||||
|
||||
/* OK to make connection */
|
||||
conn = libpqsrv_connect(connstr, PG_WAIT_EXTENSION);
|
||||
conn = libpqsrv_connect(connstr, WAIT_EVENT_EXTENSION);
|
||||
|
||||
if (PQstatus(conn) == CONNECTION_BAD)
|
||||
{
|
||||
|
@ -293,7 +293,7 @@ dblink_connect(PG_FUNCTION_ARGS)
|
|||
dblink_connstr_check(connstr);
|
||||
|
||||
/* OK to make connection */
|
||||
conn = libpqsrv_connect(connstr, PG_WAIT_EXTENSION);
|
||||
conn = libpqsrv_connect(connstr, WAIT_EVENT_EXTENSION);
|
||||
|
||||
if (PQstatus(conn) == CONNECTION_BAD)
|
||||
{
|
||||
|
|
|
@ -237,7 +237,7 @@ autoprewarm_main(Datum main_arg)
|
|||
(void) WaitLatch(MyLatch,
|
||||
WL_LATCH_SET | WL_EXIT_ON_PM_DEATH,
|
||||
-1L,
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -264,7 +264,7 @@ autoprewarm_main(Datum main_arg)
|
|||
(void) WaitLatch(MyLatch,
|
||||
WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
|
||||
delay_in_ms,
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
}
|
||||
|
||||
/* Reset the latch, loop. */
|
||||
|
|
|
@ -530,7 +530,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user)
|
|||
/* OK to make connection */
|
||||
conn = libpqsrv_connect_params(keywords, values,
|
||||
false, /* expand_dbname */
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
|
||||
if (!conn || PQstatus(conn) != CONNECTION_OK)
|
||||
ereport(ERROR,
|
||||
|
@ -863,7 +863,7 @@ pgfdw_get_result(PGconn *conn, const char *query)
|
|||
WL_LATCH_SET | WL_SOCKET_READABLE |
|
||||
WL_EXIT_ON_PM_DEATH,
|
||||
PQsocket(conn),
|
||||
-1L, PG_WAIT_EXTENSION);
|
||||
-1L, WAIT_EVENT_EXTENSION);
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
@ -1567,7 +1567,7 @@ pgfdw_get_cleanup_result(PGconn *conn, TimestampTz endtime, PGresult **result,
|
|||
WL_LATCH_SET | WL_SOCKET_READABLE |
|
||||
WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
|
||||
PQsocket(conn),
|
||||
cur_timeout, PG_WAIT_EXTENSION);
|
||||
cur_timeout, WAIT_EVENT_EXTENSION);
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
|
|
@ -4901,7 +4901,7 @@ LockBufferForCleanup(Buffer buffer)
|
|||
SetStartupBufferPinWaitBufId(-1);
|
||||
}
|
||||
else
|
||||
ProcWaitForSignal(PG_WAIT_BUFFER_PIN);
|
||||
ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);
|
||||
|
||||
/*
|
||||
* Remove flag marking us as waiter. Normally this will not be set
|
||||
|
|
|
@ -840,7 +840,7 @@ ResolveRecoveryConflictWithBufferPin(void)
|
|||
* SIGHUP signal handler, etc cannot do that because it uses the different
|
||||
* latch from that ProcWaitForSignal() waits on.
|
||||
*/
|
||||
ProcWaitForSignal(PG_WAIT_BUFFER_PIN);
|
||||
ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);
|
||||
|
||||
if (got_standby_delay_timeout)
|
||||
SendRecoveryConflictWithBufferPin(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN);
|
||||
|
|
|
@ -28,7 +28,9 @@
|
|||
|
||||
|
||||
static const char *pgstat_get_wait_activity(WaitEventActivity w);
|
||||
static const char *pgstat_get_wait_bufferpin(WaitEventBufferPin w);
|
||||
static const char *pgstat_get_wait_client(WaitEventClient w);
|
||||
static const char *pgstat_get_wait_extension(WaitEventExtension w);
|
||||
static const char *pgstat_get_wait_ipc(WaitEventIPC w);
|
||||
static const char *pgstat_get_wait_timeout(WaitEventTimeout w);
|
||||
static const char *pgstat_get_wait_io(WaitEventIO w);
|
||||
|
@ -90,7 +92,7 @@ pgstat_get_wait_event_type(uint32 wait_event_info)
|
|||
case PG_WAIT_LOCK:
|
||||
event_type = "Lock";
|
||||
break;
|
||||
case PG_WAIT_BUFFER_PIN:
|
||||
case PG_WAIT_BUFFERPIN:
|
||||
event_type = "BufferPin";
|
||||
break;
|
||||
case PG_WAIT_ACTIVITY:
|
||||
|
@ -147,9 +149,13 @@ pgstat_get_wait_event(uint32 wait_event_info)
|
|||
case PG_WAIT_LOCK:
|
||||
event_name = GetLockNameFromTagType(eventId);
|
||||
break;
|
||||
case PG_WAIT_BUFFER_PIN:
|
||||
event_name = "BufferPin";
|
||||
break;
|
||||
case PG_WAIT_BUFFERPIN:
|
||||
{
|
||||
WaitEventBufferPin w = (WaitEventBufferPin) wait_event_info;
|
||||
|
||||
event_name = pgstat_get_wait_bufferpin(w);
|
||||
break;
|
||||
}
|
||||
case PG_WAIT_ACTIVITY:
|
||||
{
|
||||
WaitEventActivity w = (WaitEventActivity) wait_event_info;
|
||||
|
@ -165,8 +171,12 @@ pgstat_get_wait_event(uint32 wait_event_info)
|
|||
break;
|
||||
}
|
||||
case PG_WAIT_EXTENSION:
|
||||
event_name = "Extension";
|
||||
break;
|
||||
{
|
||||
WaitEventExtension w = (WaitEventExtension) wait_event_info;
|
||||
|
||||
event_name = pgstat_get_wait_extension(w);
|
||||
break;
|
||||
}
|
||||
case PG_WAIT_IPC:
|
||||
{
|
||||
WaitEventIPC w = (WaitEventIPC) wait_event_info;
|
||||
|
@ -254,6 +264,28 @@ pgstat_get_wait_activity(WaitEventActivity w)
|
|||
return event_name;
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* pgstat_get_wait_bufferpin() -
|
||||
*
|
||||
* Convert WaitEventBufferPin to string.
|
||||
* ----------
|
||||
*/
|
||||
static const char *
|
||||
pgstat_get_wait_bufferpin(WaitEventBufferPin w)
|
||||
{
|
||||
const char *event_name = "unknown wait event";
|
||||
|
||||
switch (w)
|
||||
{
|
||||
case WAIT_EVENT_BUFFER_PIN:
|
||||
event_name = "BufferPin";
|
||||
break;
|
||||
/* no default case, so that compiler will warn */
|
||||
}
|
||||
|
||||
return event_name;
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* pgstat_get_wait_client() -
|
||||
*
|
||||
|
@ -297,6 +329,28 @@ pgstat_get_wait_client(WaitEventClient w)
|
|||
return event_name;
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* pgstat_get_wait_extension() -
|
||||
*
|
||||
* Convert WaitEventExtension to string.
|
||||
* ----------
|
||||
*/
|
||||
static const char *
|
||||
pgstat_get_wait_extension(WaitEventExtension w)
|
||||
{
|
||||
const char *event_name = "unknown wait event";
|
||||
|
||||
switch (w)
|
||||
{
|
||||
case WAIT_EVENT_EXTENSION:
|
||||
event_name = "Extension";
|
||||
break;
|
||||
/* no default case, so that compiler will warn */
|
||||
}
|
||||
|
||||
return event_name;
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* pgstat_get_wait_ipc() -
|
||||
*
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
#define PG_WAIT_LWLOCK 0x01000000U
|
||||
#define PG_WAIT_LOCK 0x03000000U
|
||||
#define PG_WAIT_BUFFER_PIN 0x04000000U
|
||||
#define PG_WAIT_BUFFERPIN 0x04000000U
|
||||
#define PG_WAIT_ACTIVITY 0x05000000U
|
||||
#define PG_WAIT_CLIENT 0x06000000U
|
||||
#define PG_WAIT_EXTENSION 0x07000000U
|
||||
|
@ -50,6 +50,15 @@ typedef enum
|
|||
WAIT_EVENT_WAL_WRITER_MAIN
|
||||
} WaitEventActivity;
|
||||
|
||||
/* ----------
|
||||
* Wait Events - BUFFERPIN
|
||||
* ----------
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
WAIT_EVENT_BUFFER_PIN = PG_WAIT_BUFFERPIN
|
||||
} WaitEventBufferPin;
|
||||
|
||||
/* ----------
|
||||
* Wait Events - Client
|
||||
*
|
||||
|
@ -70,6 +79,15 @@ typedef enum
|
|||
WAIT_EVENT_WAL_SENDER_WRITE_DATA,
|
||||
} WaitEventClient;
|
||||
|
||||
/* ----------
|
||||
* Wait Events - EXTENSION
|
||||
* ----------
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
WAIT_EVENT_EXTENSION = PG_WAIT_EXTENSION
|
||||
} WaitEventExtension;
|
||||
|
||||
/* ----------
|
||||
* Wait Events - IPC
|
||||
*
|
||||
|
|
|
@ -280,7 +280,7 @@ wait_for_workers_to_become_ready(worker_state *wstate,
|
|||
|
||||
/* Wait to be signaled. */
|
||||
(void) WaitLatch(MyLatch, WL_LATCH_SET | WL_EXIT_ON_PM_DEATH, 0,
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
|
||||
/* Reset the latch so we don't spin. */
|
||||
ResetLatch(MyLatch);
|
||||
|
|
|
@ -232,7 +232,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
|
|||
* for us to do.
|
||||
*/
|
||||
(void) WaitLatch(MyLatch, WL_LATCH_SET | WL_EXIT_ON_PM_DEATH, 0,
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
ResetLatch(MyLatch);
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
}
|
||||
|
|
|
@ -199,7 +199,7 @@ worker_spi_main(Datum main_arg)
|
|||
(void) WaitLatch(MyLatch,
|
||||
WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
|
||||
worker_spi_naptime * 1000L,
|
||||
PG_WAIT_EXTENSION);
|
||||
WAIT_EVENT_EXTENSION);
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
|
|
@ -2986,7 +2986,9 @@ WSANETWORKEVENTS
|
|||
WSAPROTOCOL_INFO
|
||||
WaitEvent
|
||||
WaitEventActivity
|
||||
WaitEventBufferPin
|
||||
WaitEventClient
|
||||
WaitEventExtension
|
||||
WaitEventIO
|
||||
WaitEventIPC
|
||||
WaitEventSet
|
||||
|
|
Loading…
Reference in New Issue