mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Move LSN waiting declarations and definitions to better place
3c5db1d6b
implemented the pg_wal_replay_wait() stored procedure. Due to the patch development history, the implementation resided in src/backend/commands/waitlsn.c (src/include/commands/waitlsn.h for headers).014f9f34d
moved pg_wal_replay_wait() itself to src/backend/access/transam/xlogfuncs.c near to the WAL-manipulation functions. But most of the implementation stayed in place. The code in src/backend/commands/waitlsn.c has nothing to do with commands, but is related to WAL. So, this commit moves this code into src/backend/access/transam/xlogwait.c (src/include/access/xlogwait.h for headers). Reported-by: Peter Eisentraut Discussion: https://postgr.es/m/18c0fa64-0475-415e-a1bd-665d922c5201%40eisentraut.org Reviewed-by: Pavel Borisov
This commit is contained in:
81
src/include/access/xlogwait.h
Normal file
81
src/include/access/xlogwait.h
Normal file
@ -0,0 +1,81 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* xlogwait.h
|
||||
* Declarations for LSN replay waiting routines.
|
||||
*
|
||||
* Copyright (c) 2024, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/include/access/xlogwait.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef XLOG_WAIT_H
|
||||
#define XLOG_WAIT_H
|
||||
|
||||
#include "lib/pairingheap.h"
|
||||
#include "postgres.h"
|
||||
#include "port/atomics.h"
|
||||
#include "storage/latch.h"
|
||||
#include "storage/spin.h"
|
||||
#include "tcop/dest.h"
|
||||
|
||||
/*
|
||||
* WaitLSNProcInfo - the shared memory structure representing information
|
||||
* about the single process, which may wait for LSN replay. An item of
|
||||
* waitLSN->procInfos array.
|
||||
*/
|
||||
typedef struct WaitLSNProcInfo
|
||||
{
|
||||
/* LSN, which this process is waiting for */
|
||||
XLogRecPtr waitLSN;
|
||||
|
||||
/*
|
||||
* A pointer to the latch, which should be set once the waitLSN is
|
||||
* replayed.
|
||||
*/
|
||||
Latch *latch;
|
||||
|
||||
/* A pairing heap node for participation in waitLSNState->waitersHeap */
|
||||
pairingheap_node phNode;
|
||||
|
||||
/*
|
||||
* A flag indicating that this item is present in
|
||||
* waitLSNState->waitersHeap
|
||||
*/
|
||||
bool inHeap;
|
||||
} WaitLSNProcInfo;
|
||||
|
||||
/*
|
||||
* WaitLSNState - the shared memory state for the replay LSN waiting facility.
|
||||
*/
|
||||
typedef struct WaitLSNState
|
||||
{
|
||||
/*
|
||||
* The minimum LSN value some process is waiting for. Used for the
|
||||
* fast-path checking if we need to wake up any waiters after replaying a
|
||||
* WAL record. Could be read lock-less. Update protected by WaitLSNLock.
|
||||
*/
|
||||
pg_atomic_uint64 minWaitedLSN;
|
||||
|
||||
/*
|
||||
* A pairing heap of waiting processes order by LSN values (least LSN is
|
||||
* on top). Protected by WaitLSNLock.
|
||||
*/
|
||||
pairingheap waitersHeap;
|
||||
|
||||
/*
|
||||
* An array with per-process information, indexed by the process number.
|
||||
* Protected by WaitLSNLock.
|
||||
*/
|
||||
WaitLSNProcInfo procInfos[FLEXIBLE_ARRAY_MEMBER];
|
||||
} WaitLSNState;
|
||||
|
||||
extern PGDLLIMPORT WaitLSNState *waitLSNState;
|
||||
|
||||
extern Size WaitLSNShmemSize(void);
|
||||
extern void WaitLSNShmemInit(void);
|
||||
extern void WaitLSNSetLatches(XLogRecPtr currentLSN);
|
||||
extern void WaitLSNCleanup(void);
|
||||
extern void WaitForLSNReplay(XLogRecPtr targetLSN, int64 timeout);
|
||||
|
||||
#endif /* XLOG_WAIT_H */
|
Reference in New Issue
Block a user