45 #define WAIT_EVENT_CLASS_MASK 0xFF000000
46 #define WAIT_EVENT_ID_MASK 0x0000FFFF
66 #define WAIT_EVENT_EXTENSION_HASH_INIT_SIZE 16
67 #define WAIT_EVENT_EXTENSION_HASH_MAX_SIZE 128
94 #define NUM_BUILTIN_WAIT_EVENT_EXTENSION \
95 (WAIT_EVENT_EXTENSION_FIRST_USER_DEFINED - WAIT_EVENT_EXTENSION)
98 #define WAIT_EVENT_EXTENSION_INFO(eventId) (PG_WAIT_EXTENSION | eventId)
174 "cannot use custom wait event string longer than %u characters",
212 errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
213 errmsg(
"too many wait events for extensions"));
260 elog(
ERROR,
"could not find custom wait event name for ID %u",
275 char **waiteventnames;
287 waiteventnames =
palloc(els *
sizeof(
char *));
303 *nwaitevents =
index;
304 return waiteventnames;
343 const char *event_type;
346 if (wait_event_info == 0)
354 event_type =
"LWLock";
360 event_type =
"BufferPin";
363 event_type =
"Activity";
366 event_type =
"Client";
369 event_type =
"Extension";
375 event_type =
"Timeout";
399 const char *event_name;
402 if (wait_event_info == 0)
421 WaitEventBufferPin w = (WaitEventBufferPin) wait_event_info;
428 WaitEventActivity w = (WaitEventActivity) wait_event_info;
435 WaitEventClient w = (WaitEventClient) wait_event_info;
442 WaitEventIPC w = (WaitEventIPC) wait_event_info;
449 WaitEventTimeout w = (WaitEventTimeout) wait_event_info;
456 WaitEventIO w = (WaitEventIO) wait_event_info;
462 event_name =
"unknown wait event";
469 #include "pgstat_wait_event.c"
elog(ERROR, "%s: %s", p2, msg)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
long hash_get_num_entries(HTAB *hashp)
Size hash_estimate_size(long num_entries, Size entrysize)
void * hash_seq_search(HASH_SEQ_STATUS *status)
void hash_seq_init(HASH_SEQ_STATUS *status, HTAB *hashp)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Assert(fmt[strlen(fmt) - 1] !='\n')
const char * GetLockNameFromTagType(uint16 locktag_type)
const char * GetLWLockIdentifier(uint32 classId, uint16 eventId)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
char * pstrdup(const char *in)
size_t strlcpy(char *dst, const char *src, size_t siz)
Size add_size(Size s1, Size s2)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
HTAB * ShmemInitHash(const char *name, long init_size, long max_size, HASHCTL *infoP, int hash_flags)
#define SpinLockInit(lock)
#define SpinLockRelease(lock)
#define SpinLockAcquire(lock)
char wait_event_name[NAMEDATALEN]
char wait_event_name[NAMEDATALEN]
static HTAB * WaitEventExtensionHashByName
#define NUM_BUILTIN_WAIT_EVENT_EXTENSION
static const char * pgstat_get_wait_ipc(WaitEventIPC w)
static const char * pgstat_get_wait_io(WaitEventIO w)
const char * pgstat_get_wait_event(uint32 wait_event_info)
void pgstat_set_wait_event_storage(uint32 *wait_event_info)
static const char * pgstat_get_wait_bufferpin(WaitEventBufferPin w)
struct WaitEventExtensionCounterData WaitEventExtensionCounterData
Size WaitEventExtensionShmemSize(void)
struct WaitEventExtensionEntryByName WaitEventExtensionEntryByName
static WaitEventExtensionCounterData * WaitEventExtensionCounter
#define WAIT_EVENT_EXTENSION_INFO(eventId)
static const char * pgstat_get_wait_timeout(WaitEventTimeout w)
static uint32 local_my_wait_event_info
const char * pgstat_get_wait_event_type(uint32 wait_event_info)
static HTAB * WaitEventExtensionHashById
void pgstat_reset_wait_event_storage(void)
#define WAIT_EVENT_EXTENSION_HASH_MAX_SIZE
static const char * pgstat_get_wait_client(WaitEventClient w)
#define WAIT_EVENT_ID_MASK
char ** GetWaitEventExtensionNames(int *nwaitevents)
#define WAIT_EVENT_CLASS_MASK
uint32 WaitEventExtensionNew(const char *wait_event_name)
void WaitEventExtensionShmemInit(void)
#define WAIT_EVENT_EXTENSION_HASH_INIT_SIZE
struct WaitEventExtensionEntryById WaitEventExtensionEntryById
uint32 * my_wait_event_info
static const char * GetWaitEventExtensionIdentifier(uint16 eventId)
static const char * pgstat_get_wait_activity(WaitEventActivity w)
#define PG_WAIT_BUFFERPIN
#define PG_WAIT_EXTENSION