61#include "utils/fmgrprotos.h"
92 "WaitLSNWaitEvents must match WaitLSNType enum");
117 elog(
ERROR,
"invalid LSN wait type: %d", lsnType);
176 int i = (
int) lsnType;
197 int i = (
int) lsnType;
222 int i = (
int) lsnType;
244#define WAKEUP_PROC_STATIC_ARRAY_SIZE (16)
263 int i = (
int) lsnType;
322 int i = (
int) lsnType;
450 errmsg(
"terminating connection due to unexpected postmaster exit"),
static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static void pg_atomic_init_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static uint64 pg_atomic_read_u64(volatile pg_atomic_uint64 *ptr)
long TimestampDifferenceMilliseconds(TimestampTz start_time, TimestampTz stop_time)
TimestampTz GetCurrentTimestamp(void)
#define Assert(condition)
#define StaticAssertDecl(condition, errmessage)
int errcode(int sqlerrcode)
#define ereport(elevel,...)
void SetLatch(Latch *latch)
void ResetLatch(Latch *latch)
int WaitLatch(Latch *latch, int wakeEvents, long timeout, uint32 wait_event_info)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
#define CHECK_FOR_INTERRUPTS()
void pairingheap_remove(pairingheap *heap, pairingheap_node *node)
void pairingheap_add(pairingheap *heap, pairingheap_node *node)
void pairingheap_initialize(pairingheap *heap, pairingheap_comparator compare, void *arg)
pairingheap_node * pairingheap_remove_first(pairingheap *heap)
pairingheap_node * pairingheap_first(pairingheap *heap)
#define pairingheap_is_empty(h)
#define pairingheap_container(type, membername, ptr)
#define pairingheap_const_container(type, membername, ptr)
#define NUM_AUXILIARY_PROCS
#define GetPGProcByNumber(n)
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
#define ShmemRequestStruct(...)
ShmemRequestCallback request_fn
WaitLSNProcInfo procInfos[FLEXIBLE_ARRAY_MEMBER]
pg_atomic_uint64 minWaitedLSN[WAIT_LSN_TYPE_COUNT]
pairingheap waitersHeap[WAIT_LSN_TYPE_COUNT]
#define TimestampTzPlusMilliseconds(tz, ms)
#define WL_POSTMASTER_DEATH
XLogRecPtr GetWalRcvFlushRecPtr(XLogRecPtr *latestChunkStart, TimeLineID *receiveTLI)
XLogRecPtr GetWalRcvWriteRecPtr(void)
bool RecoveryInProgress(void)
XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI)
#define XLogRecPtrIsValid(r)
bool PromoteIsTriggered(void)
XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI)
static int waitlsn_cmp(const pairingheap_node *a, const pairingheap_node *b, void *arg)
void WaitLSNCleanup(void)
#define WAKEUP_PROC_STATIC_ARRAY_SIZE
const ShmemCallbacks WaitLSNShmemCallbacks
static bool WaitLSNTypeRequiresRecovery(WaitLSNType t)
struct WaitLSNState * waitLSNState
static void updateMinWaitedLSN(WaitLSNType lsnType)
static void deleteLSNWaiter(WaitLSNType lsnType)
XLogRecPtr GetCurrentLSNForWaitType(WaitLSNType lsnType)
WaitLSNResult WaitForLSN(WaitLSNType lsnType, XLogRecPtr targetLSN, int64 timeout)
static void WaitLSNShmemRequest(void *arg)
static void WaitLSNShmemInit(void *arg)
static void wakeupWaiters(WaitLSNType lsnType, XLogRecPtr currentLSN)
static void addLSNWaiter(XLogRecPtr lsn, WaitLSNType lsnType)
void WaitLSNWakeup(WaitLSNType lsnType, XLogRecPtr currentLSN)
static const uint32 WaitLSNWaitEvents[]
#define WAIT_LSN_TYPE_COUNT
@ WAIT_LSN_RESULT_NOT_IN_RECOVERY
@ WAIT_LSN_RESULT_TIMEOUT
@ WAIT_LSN_RESULT_SUCCESS
@ WAIT_LSN_TYPE_PRIMARY_FLUSH
@ WAIT_LSN_TYPE_STANDBY_REPLAY
@ WAIT_LSN_TYPE_STANDBY_FLUSH
@ WAIT_LSN_TYPE_STANDBY_WRITE