55#include "utils/fmgrprotos.h"
127 int i = (int) lsnType;
148 int i = (int) lsnType;
173 int i = (int) lsnType;
195#define WAKEUP_PROC_STATIC_ARRAY_SIZE (16)
214 int i = (int) lsnType;
239 wakeUpProcs[numWakeUpProcs++] = procInfo->
procno;
259 for (
i = 0;
i < numWakeUpProcs;
i++)
271 int i = (int) lsnType;
365 if (targetLSN <= currentLSN)
379 (lsnType ==
WAIT_LSN_TYPE_REPLAY) ? WAIT_EVENT_WAIT_FOR_WAL_REPLAY : WAIT_EVENT_WAIT_FOR_WAL_FLUSH);
387 errcode(ERRCODE_ADMIN_SHUTDOWN),
388 errmsg(
"terminating connection due to unexpected postmaster exit"),
405 if (targetLSN > currentLSN)
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)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Assert(PointerIsAligned(start, uint64))
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)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
pairingheap_node heapNode
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
bool RecoveryInProgress(void)
XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI)
#define XLogRecPtrIsValid(r)
bool PromoteIsTriggered(void)
XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI)
void WaitLSNShmemInit(void)
static int waitlsn_cmp(const pairingheap_node *a, const pairingheap_node *b, void *arg)
void WaitLSNCleanup(void)
#define WAKEUP_PROC_STATIC_ARRAY_SIZE
struct WaitLSNState * waitLSNState
static void updateMinWaitedLSN(WaitLSNType lsnType)
static void deleteLSNWaiter(WaitLSNType lsnType)
WaitLSNResult WaitForLSN(WaitLSNType lsnType, XLogRecPtr targetLSN, int64 timeout)
static void wakeupWaiters(WaitLSNType lsnType, XLogRecPtr currentLSN)
static void addLSNWaiter(XLogRecPtr lsn, WaitLSNType lsnType)
void WaitLSNWakeup(WaitLSNType lsnType, XLogRecPtr currentLSN)
Size WaitLSNShmemSize(void)
@ WAIT_LSN_RESULT_NOT_IN_RECOVERY
@ WAIT_LSN_RESULT_TIMEOUT
@ WAIT_LSN_RESULT_SUCCESS