PostgreSQL Source Code  git master
walsender_private.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * walsender_private.h
4  * Private definitions from replication/walsender.c.
5  *
6  * Portions Copyright (c) 2010-2020, PostgreSQL Global Development Group
7  *
8  * src/include/replication/walsender_private.h
9  *
10  *-------------------------------------------------------------------------
11  */
12 #ifndef _WALSENDER_PRIVATE_H
13 #define _WALSENDER_PRIVATE_H
14 
15 #include "access/xlog.h"
16 #include "nodes/nodes.h"
17 #include "replication/syncrep.h"
18 #include "storage/latch.h"
19 #include "storage/shmem.h"
20 #include "storage/spin.h"
21 
22 typedef enum WalSndState
23 {
29 } WalSndState;
30 
31 /*
32  * Each walsender has a WalSnd struct in shared memory.
33  *
34  * This struct is protected by its 'mutex' spinlock field, except that some
35  * members are only written by the walsender process itself, and thus that
36  * process is free to read those members without holding spinlock. pid and
37  * needreload always require the spinlock to be held for all accesses.
38  */
39 typedef struct WalSnd
40 {
41  pid_t pid; /* this walsender's PID, or 0 if not active */
42 
43  WalSndState state; /* this walsender's state */
44  XLogRecPtr sentPtr; /* WAL has been sent up to this point */
45  bool needreload; /* does currently-open file need to be
46  * reloaded? */
47 
48  /*
49  * The xlog locations that have been written, flushed, and applied by
50  * standby-side. These may be invalid if the standby-side has not offered
51  * values yet.
52  */
56 
57  /* Measured lag times, or -1 for unknown/none. */
61 
62  /*
63  * The priority order of the standby managed by this WALSender, as listed
64  * in synchronous_standby_names, or 0 if not-listed.
65  */
67 
68  /* Protects shared variables shown above. */
70 
71  /*
72  * Pointer to the walsender's latch. Used by backends to wake up this
73  * walsender when it has work to do. NULL if the walsender isn't active.
74  */
76 
77  /*
78  * Timestamp of the last message received from standby.
79  */
81 
82  /* Statistics for transactions spilled to disk. */
83  int64 spillTxns;
84  int64 spillCount;
85  int64 spillBytes;
86 } WalSnd;
87 
88 extern WalSnd *MyWalSnd;
89 
90 /* There is one WalSndCtl struct for the whole database cluster */
91 typedef struct
92 {
93  /*
94  * Synchronous replication queue with one queue per request type.
95  * Protected by SyncRepLock.
96  */
98 
99  /*
100  * Current location of the head of the queue. All waiters should have a
101  * waitLSN that follows this value. Protected by SyncRepLock.
102  */
104 
105  /*
106  * Are any sync standbys defined? Waiting backends can't reload the
107  * config file safely, so checkpointer updates this value as needed.
108  * Protected by SyncRepLock.
109  */
111 
113 } WalSndCtlData;
114 
115 extern WalSndCtlData *WalSndCtl;
116 
117 
118 extern void WalSndSetState(WalSndState state);
119 
120 /*
121  * Internal functions for parsing the replication grammar, in repl_gram.y and
122  * repl_scanner.l
123  */
124 extern int replication_yyparse(void);
125 extern int replication_yylex(void);
126 extern void replication_yyerror(const char *str) pg_attribute_noreturn();
127 extern void replication_scanner_init(const char *query_string);
128 extern void replication_scanner_finish(void);
129 
131 
132 #endif /* _WALSENDER_PRIVATE_H */
int slock_t
Definition: s_lock.h:934
XLogRecPtr write
#define pg_attribute_noreturn()
Definition: c.h:145
int64 TimestampTz
Definition: timestamp.h:39
TimeOffset flushLag
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:276
Definition: nodes.h:529
TimeOffset writeLag
struct WalSnd WalSnd
slock_t mutex
Node * replication_parse_result
int64 spillCount
int64 spillBytes
XLogRecPtr flush
Latch * latch
int64 spillTxns
void replication_yyerror(const char *str) pg_attribute_noreturn()
Definition: latch.h:110
void WalSndSetState(WalSndState state)
Definition: walsender.c:3205
WalSndState state
int replication_yyparse(void)
int64 TimeOffset
Definition: timestamp.h:40
XLogRecPtr sentPtr
WalSndCtlData * WalSndCtl
Definition: walsender.c:109
WalSnd * MyWalSnd
Definition: walsender.c:112
TimeOffset applyLag
uint64 XLogRecPtr
Definition: xlogdefs.h:21
int sync_standby_priority
Definition: regguts.h:298
bool needreload
WalSndState
int replication_yylex(void)
TimestampTz replyTime
#define NUM_SYNC_REP_WAIT_MODE
Definition: syncrep.h:28
XLogRecPtr apply
void replication_scanner_finish(void)
void replication_scanner_init(const char *query_string)