Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * walsender.h
4 : * Exports from replication/walsender.c.
5 : *
6 : * Portions Copyright (c) 2010-2026, PostgreSQL Global Development Group
7 : *
8 : * src/include/replication/walsender.h
9 : *
10 : *-------------------------------------------------------------------------
11 : */
12 : #ifndef _WALSENDER_H
13 : #define _WALSENDER_H
14 :
15 : #include "access/xlogdefs.h"
16 :
17 : /*
18 : * What to do with a snapshot in create replication slot command.
19 : */
20 : typedef enum
21 : {
22 : CRS_EXPORT_SNAPSHOT,
23 : CRS_NOEXPORT_SNAPSHOT,
24 : CRS_USE_SNAPSHOT,
25 : } CRSSnapshotAction;
26 :
27 : /* global state */
28 : extern PGDLLIMPORT bool am_walsender;
29 : extern PGDLLIMPORT bool am_cascading_walsender;
30 : extern PGDLLIMPORT bool am_db_walsender;
31 : extern PGDLLIMPORT bool wake_wal_senders;
32 :
33 : /* user-settable parameters */
34 : extern PGDLLIMPORT int max_wal_senders;
35 : extern PGDLLIMPORT int wal_sender_timeout;
36 : extern PGDLLIMPORT bool log_replication_commands;
37 :
38 : extern void InitWalSender(void);
39 : extern bool exec_replication_command(const char *cmd_string);
40 : extern void WalSndErrorCleanup(void);
41 : extern void PhysicalWakeupLogicalWalSnd(void);
42 : extern XLogRecPtr GetStandbyFlushRecPtr(TimeLineID *tli);
43 : extern void WalSndSignals(void);
44 : extern Size WalSndShmemSize(void);
45 : extern void WalSndShmemInit(void);
46 : extern void WalSndWakeup(bool physical, bool logical);
47 : extern void WalSndInitStopping(void);
48 : extern void WalSndWaitStopping(void);
49 : extern void HandleWalSndInitStopping(void);
50 : extern void WalSndRqstFileReload(void);
51 :
52 : /*
53 : * Remember that we want to wakeup walsenders later
54 : *
55 : * This is separated from doing the actual wakeup because the writeout is done
56 : * while holding contended locks.
57 : */
58 : #define WalSndWakeupRequest() \
59 : do { wake_wal_senders = true; } while (0)
60 :
61 : /*
62 : * wakeup walsenders if there is work to be done
63 : */
64 : static inline void
65 146571 : WalSndWakeupProcessRequests(bool physical, bool logical)
66 : {
67 146571 : if (wake_wal_senders)
68 : {
69 133335 : wake_wal_senders = false;
70 133335 : if (max_wal_senders > 0)
71 100959 : WalSndWakeup(physical, logical);
72 : }
73 146571 : }
74 :
75 : #endif /* _WALSENDER_H */
|